[转]Windows Shell 编程 第二章 【来源:http://blog.csdn.net/wangqiulin123456/article/details/7987893】
第二章Shell的结构
Shell模块
Shell的命名空间

PIDLs

- typedef struct _ITEMIDLIST
- {
- SHITEMID mkid;
- } ITEMIDLIST, *LPITEMIDLIST;
- typedef struct _SHITEMID
- {
- USHORT cb;
- BYTE abID[1];
- } SHITEMID, *LPSHITEMID;

Shell观察
Shell地址空间
Shell内存分配器
Shell任务条
Shell API 函数
|
组
|
功能
|
|
一般Windows函数
Shell内部函数
任务条函数
文件函数
文件夹函数
|
涉及到屏幕保护,控制面板脚本程序,联机帮助,以及Shell拖拽(不是OLE拖拽)
访问探测器地址空间的函数,获得Shell存储分配器的函数,导出可执行程序的函数以及感觉用户接口改变的函数。
涉及到托盘域的函数和与Windows任务条通讯的函数
操作文件的函数,他们执行如‘拷贝’,‘移动’,‘删除’和‘取得信息’等操作的系统活动,和添加文件到特殊的系统文件夹如‘最近文档’等。
操作文件夹的函数,使用这些函数,你可以浏览文件夹,获得系统文件夹的路径,发现文件夹的设置。
|
|
组
|
功能
|
|
图标函数
环境函数
Shell 轻量级API函数
|
从执行文件中抽取图标的函数
处理环境变量的函数
容易地访问注册表的函数,读写注册表函数,处理路径名函数,和处理字符串函数。
|
一般Windows函数
|
函数
|
描述
|
|
DragAcceptFiles()
|
标记允许窗口认可拖拽操作。
|
|
DragFinish()
|
从Shell中释放移动文件名列表所分配的内存
|
|
DragQueryFile()
|
从Shell处理拖拽而分配的内存块中抽取文件名
|
|
DragQueryPoint()
|
获得拖拽发生的点位置
|
|
CPlApplet()
|
控制面板脚本小程序的主程序
|
|
GetMenuContextHelpId()
|
返回关联于给定菜单的帮助ID
|
|
GetWindowContextHelpId()
|
返回关联于给定窗口的帮助ID
|
|
SetMenuContextHelpId()
|
设置关联于给定菜单的帮助ID
|
|
SetWindowContextHelpId()
|
设置关联于给定窗口的帮助ID
|
|
WinHelp()
|
打开帮助文件
|
|
ShellAbout()
|
显示默认和特定客户化的‘关于’信息框
|
|
|
|
Shell内部函数
|
函数
|
描述
|
|
ShellExecute()
|
在指定的文件上执行特殊操作
|
|
ShellExecuteEx()
|
与上面函数相同,但是有更多的选择
|
|
SHChangeNotify()
|
通过这个函数程序能够让Shell知道什么变化了,以及要求它刷新它所保有的信息
|
|
SHGetInstanceExplorer()
|
返回探测器IUnknown接口指针
|
|
SHGetMalloc()
|
返回一个指向Shell存储分配器的指针
|
|
SHLoadInProc()
|
装载指定的COM对象到探测器地址空间
|
任务条函数
|
函数
|
描述
|
|
Shell_NotifyIcon()
|
显示和管理靠近时钟的托盘区域的图标
|
|
SHAppBarMessage()
|
发送消息到系统的任务条
|
|
|
|
文件函数
|
函数
|
描述
|
版本
|
|
FindExecutable()
|
返回指定文件名注册的可执行文件路径
|
所有版本
|
|
SHAddToRecentDocs()
|
把给定文件的连接加到系统的‘最近文档’文件夹中。
|
所有版本
|
|
SHFileOperation()
|
用于拷贝、移动、删除或重命名一个或多个文件。
|
所有版本
|
|
SHFreeNameMappings()
|
释放SHFileOperation()函数在特定情况下返回的存储结构
|
|
|
SHGetFileInfo()
|
返回给定文件的各种信息块
|
所有版本
|
|
SHGetNewLinkInfo()
|
建立新的快捷方式名
|
4.71
|
文件夹(Folder)函数
|
函数
|
描述
|
版本
|
|
SHBrowseForFolder()
|
显示选择文件夹的对话框
|
所有版本
|
|
SHEmptyRecycleBin()
|
销毁‘回收站’的内容
|
4.71
|
|
SHGetDataFromIDList()
|
从标识符表中恢复数据
|
所有版本
|
|
SHGetDesktopFolder()
|
返回‘桌面’文件夹的IShellFolder指针
|
所有版本
|
|
SHGetDiskFreeSpace()
|
返回指定驱动器的磁盘可用空间
|
4.71
|
|
SHGetPathFromIDList()
|
返回指定标识符列表的路径名(如果存在)
|
所有版本
|
|
SHGetSpecialFolder
Location()
|
返回特殊的系统文件夹的标识符列表
|
4.71
|
|
SHGetSpecialFolderPath()
|
返回系统特殊文件夹的路径名(如果存在)
|
所有版本
|
|
SHGetSettings()
|
返回文件夹当前设置的值
|
4.71
|
|
SHInvokePrinterCommand()
|
向打印机发送命令
|
4.71
|
|
SHQueryRecycleBin()
|
返回‘回收站’当前占有的空间
|
4.71
|
|
|
|
|
图标函数
|
函数
|
描述
|
|
ExtractIcon()
|
返回可执行文件的图标Handle
|
|
ExtractIconEx()
|
与上函数相同,但是有更多的选择。
|
|
ExtractAssociatedIcon()
|
基于文件类,返回指定文件的图标Handle
|
COM接口
|
组
|
接口
|
|
Shell 扩展
|
涉及到所有Shell活动的COM接口,从图标到关联菜单,从UI活动到文件观察
|
|
Namespace 扩展
|
涉及到命名空间扩展的COM接口
|
|
钩子
|
能够钩住某些东西的接口,特别是程序执行,URL转换和建立Internet快捷方式
|
|
杂项接口
|
一些零碎接口,如客户化任务条的接口,与打开对话框通讯的接口和对‘我的公文包’编程的接口
|
Shell接口
|
接口
|
描述
|
版本
|
|
IFileViewer,
IFileViewerSite
|
使你能定义对给定类型的文件提供‘快速观察’处理器的模块。
|
所有版本
|
|
IInputObject,
IInputObjectSite
|
这两个接口用于处理UI活动和对具有接收用户输入的Shell对象进行加速操作处理。
|
4.71
|
|
IShellIconOverlay,
IShellIconOverlayIdentifier
|
用于发送文件图标重叠消息,使你能够知道用于给定文件的重叠形式。一个图标重叠是Shell绘制在图标上的Bitmap图像,以便更好地表现它,如,一个手形重叠表示文件夹的共享。
|
4.71
|
|
IContextMenu,
IContextMenu2
|
允许为特殊类型的文件添加新的关联菜单项。
IContextMenu2处理自绘菜单
|
所有版本
|
|
IContextMenu3
|
与IContextMenu2相同,但是给出了更好的键盘控制。
|
4.71
|
|
IShellExtInit
|
执行一个Shell扩展的初始化
|
所有版本
|
|
IShellChangeNotify
|
SHChangeNotify() API函数在Shell扩展上的副本,基本上,它允许你写一个模块钩住由SHChangeNotify()函数通知的Shell层上的变化。
|
4.71
|
|
IExtractIcon
|
允许你获取任何文件夹项的图标信息。
|
所有版本
|
|
IShellIcon
|
提供另一种获取任何文件夹项图标信息的方法,在特定情况下,这种方法优于IExtractIcon方法。
|
所有版本
|
|
IShellLink
|
允许建立和解析文件和文件夹的快捷方式
|
所有版本
|
|
IShellPropSheetExt
|
用于为指定文件类增加属性页到‘属性’对话框。
|
所有版本
|
|
|
|
|
命名空间接口
|
接口
|
描述
|
版本
|
|
IShellView,
IShellView2
|
用于定义命名空间扩展的观察对象。IShellView2仍然没有文档资料,但是在基于Web的观察中有使用。
|
所有版本
|
|
IShellBrowser
|
显示浏览器,他就是探测器或Internet探测器。
|
所有版本
|
|
IEnumIDList
|
提供Shell 枚举文件夹内容的方法。
|
所有版本
|
|
IShellFolder
|
提供令shell以标准方式处理客户文件夹的方法。IShellFolder对探测器隐藏客户代码。
|
所有版本
|
|
IPersistFolder
|
使你能初始化某些Shell扩展和所有命名空间扩展。
|
所有版本
|
|
IPersistFolder2
|
与上相同,加入了一些对基于Web的观察更强的支持。
|
4.71
|
|
IQueryInfo Retrieves flags and infotip text for items in a folder. 4.71
|
恢复文件夹项的标志和信息标签文字。
|
4.71
|
|
|
|
|
钩子接口
|
接口
|
描述
|
版本
|
|
ICopyHook
|
能钩住Shell中的所有文件操作(拷贝、移动、删除、重命名)。
|
所有版本
|
|
IURLSearchHook
|
使你能够探知探测器正在试图转换一个不可知的URL协议。
|
4.71
|
|
INewShortcutHook
|
使你能够探知探测器正在试图建立新的Internet快捷方式。
|
4.71
|
|
IShellExecuteHook
|
能够钩住通过ShellExecute()或ShellExecuteEx()导出的所有新进程的启动。
|
所有版本
|
|
|
|
|
杂项接口
|
接口
|
描述
|
版本
|
|
INotifyReplica,
IReconcilableObject,
IReconcileInitiator
|
所有这些接口都涉及到文件调整过程。最终都产生同一个文档的更新版本。
|
所有版本
|
|
ICommDlgBrowser
|
当客户文件夹嵌入到通用对话框中时,提供特殊的浏览行为。
|
所有版本
|
|
ITaskbarList
|
允许在系统任务条中加入新的按钮。
|
4.71
|
|
|
|
|
为什么又有API,又有COM
活动桌面有什么变化
新的Shell观察对象






新任务条的布局

[转]Windows Shell 编程 第二章 【来源:http://blog.csdn.net/wangqiulin123456/article/details/7987893】的更多相关文章
- [转]Windows Shell 编程 第四章 【来源 http://blog.csdn.net/wangqiulin123456/article/details/7987933】
第四章 文件的本质 以前,所有文件和目录都有一个确定的属性集:时间,日期,尺寸,以及表示‘只读的’,‘隐藏的,‘存档的’,或‘系统的’状态标志.然而,Windos95(及后来的WindowsNT4.0 ...
- [转]Windows Shell 编程 第九章 【来源:http://blog.csdn.net/wangqiulin123456/article/details/7987969】
第九章 图标与Windows任务条 如果问一个非程序人员Windows最好的特色是什么,得到的答案应该是系统最有吸引力的图标.无论是Windows98现在支持的通用串行总线(USB)还是WDM(看上去 ...
- [转]Windows Shell 编程 第三章 【转自:http://blog.csdn.net/wangqiulin123456/article/details/7987901】
第三章 操作文件 我依然清楚地记得,Windows95 的贝塔版出现的情形,它在朋友之间和学院中传播,好酷,全新的文件管理器,一种全图标,全彩色可客户化的界面,以及活泼的动画标识使得在文件拷贝和删除方 ...
- [转]第一章 Windows Shell是什么 【来源:http://blog.csdn.net/wangqiulin123456/article/details/7987862】
一个操作系统外壳的不错的定义是它是一个系统提供的用户界面,它允许用户执行公共的任务,如访问文件系统,导出执行程序,改变系统设置等.MS-DOS有一个Command.COM扮演着这个角色.然而Windo ...
- Shell 括号辨识(转http://blog.csdn.net/taiyang1987912/article/details/39551385)
一.小括号,圆括号() 1.单小括号 () ①命令组.括号中的命令将会新开一个子shell顺序执行,所以括号中的变量不能够被脚本余下的部分使用.括号中多个命令之间用分号隔开,最后一个命令可以没有 ...
- VMware下Ubuntu与宿主Windows共享文件夹 (转至 http://blog.csdn.net/zz962/article/details/7706755)
概述 1.安装VMware Tool 2.设置共享 步骤 开始安装VMware Tool 显示如下画面(如果宿主无法访问外网,可能会出现一个更新失败,可以无视之) 通过下列命令解压.执行,分别是下面的 ...
- Windows下QT4.8.4编译环境的搭建(转载http://blog.csdn.net/bestgonghuibin/article/details/38933141)
开始使用QT了,所以第一步就是把环境搭起来,这里小记一下,以免以后忘记. 1. 下载安装文件 要使用QT功能,那么必须要下载QT的源码,还必须要一个是用QT的编译环境,可以是VS2010,也可以是专用 ...
- windows 安装lua-5.3.4 --引用自https://blog.csdn.net/wangtong01/article/details/78296369
版权声明:本文为博主原创文章,转载时请标明出处.http://blog.csdn.net/wangtong01 https://blog.csdn.net/wangtong01/article/det ...
- ubuntu下设置jupyter notebook 2017年07月29日 19:28:34 小旋锋 阅读数:8329 标签: ubuntu 更多 个人分类: python 二三事 来源:http://blog.csdn.net/suzyu12345/article/details/51037905 Ipython Notebook现在已经改名为Ipython jupyter,是最知名最好用的
ubuntu下设置jupyter notebook 来源:http://blog.csdn.net/suzyu12345/article/details/51037905 Ipython No ...
随机推荐
- ASP.NET基础系列
一.HttpContext概述 1).如何获取对象: 在WebForm或类库(包括MVC)项目中,通过Current静态属性,就能够获得HttpContext的对象: HttpContext cont ...
- 按要求编写Java程序: (1)编写一个接口:InterfaceA,只含有一个方法int method(int n); (2)编写一个类:ClassA来实现接口InterfaceA,实现int method(int n)接口方 法时,要求计算1到n的和; (3)编写另一个类:ClassB来实现接口InterfaceA,实现int method(int n)接口 方法时,要求计算n的阶乘(n!);
package com.homework2; public class ClassA implements InterfaceA { @Override public int method(int n ...
- git 快速入门(二)
一.引子 git代码托管的优秀工具之一, 其工作原理和svn截然不同.一旦拥有主干master分支权限, 只要在本地拉取主干分支, 可以随时随地切换分支. 它拥有众多优点,eg :支持在断网的情况下, ...
- hdu3589 Jacobi symbol(二次剩余 数论题)
本题的注意点:n=p1*p2*p3......Pm 解法:直接利用公式a^((p-1)/2)=(a/p)mod p 即可求解. #include<stdio.h> #include< ...
- Tomcat无法部署项目
设置项目的Jdk,compire version 增加java EE 如果有必要,现在项目根目录下放置.mymetadata文件 <?xml version="1.0" en ...
- 导出DC列表
$DomainName = (gwmi win32_computersystem).Domain$dn0 = $DomainName.Split(".")[0]$dn1 = $Do ...
- HTML5----CSS显示半个字符
CSS显示半个字符的基本思路: 就是一个字写两遍,分别显示一半.这里就须要用到CSS伪元素:before和:after,记住这个"伪元素"的"伪"字,表明它本来 ...
- 【51】编写new和delete时需固守常规
1.[50]讲了,有很多理由需要写个自定义的new/delete,自定义new/delete的时候,需要遵守一些规则. 2.循环申请,直到成功或者抛出异常,如下: void* operator new ...
- PHP函数ip2long转换IP时数值太大产生负数的解决办法
有两种办法: 1. bindec( decbin($long)) 利用bindec和decbin两个函数转换一次就没有问题了 我一直在用上面的方法,但是在升级到PHP7以后就不起作用了(因为最近只进 ...
- 增强的for循环(或foreach)
增强的for循环(也称为foreach循环):不用下标变量,顺序的訪问整个数组.不能以其它顺序訪问数组,或者改变数组的元素. for(elementType element: arrayRefVar) ...