没有合适的资源?快使用搜索试试~ 我知道了~
首页Windows Shell扩展编程傻瓜手册大全:上下文菜单扩展
资源详情
资源评论
资源推荐
【转】Windows Shell 扩展编程傻瓜手册大全:上下文菜单扩展
引用自:http://blog.163.com/yesaidu@126/blog/static/
51819307200861853827582/
Part I: A step-by-step tutorial on writing shell extensions
第一节:Windows shell 扩展初步:上下文菜单扩展
作者:Michael Dunn
译者:yesaidu
源代码下载:1 2
目录
● README
● 系列绪言
● 第一部分绪言
● 从 AppWizard 开始
● 初始化接口
● 上下文菜单交互接口
○ 更改上下文菜单
○ 在状态栏显示拉线式(fly-by)帮助
○ 执行用户选择
○ 其他代码细节
● 注册 Shell 扩展
● 调试 Shell 扩展
● 所有的外观
● 版权与许可
● 修订历史
README
我想,你在行动之前,或者你在本手册的讨论板发帖之前应该阅读这份材料。
本手册最初是用 VC 6 编写的。现在,VC8 都出来了,我感觉是时候对本手册进行升级到
VC7.1 了。(通过 VC7.1 自动升级 VC6 项目,并不一定会完全地完成代码转换;因此,VC7.1 用
户可能碰到这样的现象,即在转换、编译示例代码后,运行时可能没有效果或出错。)只要我
仔细检查并更新本手册,本手册将体现 VC7.1 的新特点。我将会提供 VC7.1 项目的源码下载。
VC2005 用户要注意了:VC2005 体验版(Express edi'on)没有一同发布 ATL 或 MFC。既然
本手册用到了 ATL,有时还使用了 MFC,因此,你不能用 VC2005 体验版来编译示例代码。
如果你正使用 VC6,那么,你应该设法取得最新的平台 SDK。你可以使用 WEB
安装版
(web install version),或者下载 CAB
文件 或者 ISO
镜像包 ,安装它们到本地。确认把 SDK 的
INCLUDE 和 LIB 目录添加到了 VC 的搜索路径中。你能在 PSDK 程序组中找到 Visual Studio
Registraon 目录。这是一个好主意,无论你使用 VC7,还是用 VC8,你都能取得最新的 PSDK 头
文件和库文件。
VC7 用户注意了:如果你没有更新 PSDK,必须改变默认的 INCLUDE 路径。确信“VC++目录”
-“包含文件”列表的第一项是$(VCInstallDir)PlatformSDK\include,它在
($VCInstallDir)include 前面,如下图:
由于一直没有使用过 VC 8,因此我不确定示例代码在 VC 8 上是否可以通过编译。只是希望,
把 VC7 项目升级到 VC8 的自动转换功能比从 VC6 到 VC7 的要好些。如果你使用 VC8 编译示例时
遇到了任何疑惑,请在讨论板发帖。
手册绪言
所谓 shell 扩展就是能增加某些功能到 Windows 资源管理器的 COM 对象。Shell 扩展有很多
内容,但关于它们的文档资料却非常少见。(自从我最先发表这份手册的六年来,我相信情况
要好多了。)如果你想深入 Windows shell 的内部,极力推荐 Dino Esposito 的巨作 Visual C++
Windows Shell Programming (ISBN 1861001843)。对于没有这本书的人,或者仅仅对 shell 扩展感
兴趣的朋友,我将给你一个惊喜:一本有关 shell 扩展编程的傻瓜手册。即使本手册并未让你感
到惊喜,那么,对你理解如何编写 shell 扩展也会提供很好的帮助。本手册假定你理解并掌握了
COM 和 ATL 的基本原理和应用。如果你还需要学习 COM 基本原理,请参考 Intro to COM。
第一节介绍了 shell 扩展的概要,并提供了一个上下文菜单扩展的示例,使你对后面的章节
充满兴趣。
从字面上看,shell 扩展包括两个方面:shell 和扩展。所谓 shell,就是资源管理器
Explorer;而扩展就是指在预定的事件发生时由 Explorer 调用执行的代码(比如,在.DOC 文件上
右击)。因此,shell 扩展就是为 Explorer 增添功能的 COM 对象。
shell 扩展是一个进程内服务器,它实现了跟 Explorer 通信的接口。ATL 是设计一个 shell 扩
展,并使之运行的最简单办法;这样你就不用为一遍又一遍的编写 QueryInterface()和
AddRef()而大伤脑筋。在 Windows NT 下调试 shell 扩展要更容易些,这点,我在后面还会谈
到。
Shell 扩展有很多种类型,每一类型都有其被调用的时机:即每种类型在不同的事件发生时
被调用执行。下表列出了一些较常见的类型,以及它们被调用的情况:
类型 被调用的时机 它可以做什么
Context menu 扩展处理器
用户在文件对象或文件夹对象
或目录窗口背景(需要 shell v
4.71+以上)单击右键
在上下文菜单中添加菜单项
Property sheet 扩展处理器 文件属性对话框显示时 在属性对话框中定制属性页
Drag and drop 扩展处理器
用户用右键拖放文件到文件夹
窗口或桌面时
在上下文菜单中添加菜单项
Drop handler 扩展处理器
用户拖对象并将其放到文件上
时
任何你想做的
QueryInfo扩展处理器h
(需要 shell version
4.71+)
用户在文件、“我的电脑”等其他
shell 对象的图标上悬停时
返回一个 Explorer 显示在工具提示
中的字符串
第一节绪言
现在,你可能有很多的疑问:为什么扩展看起来像 Explorer?它到底是什么样的?一个例
子就是 WinZip(或者 WinRAR,我没安装 WinZip ^_^――译者)——它包含了多种 shell 扩展,
其中之一就是上下文扩展。下图是 WinZip(其实是 WinRA 的h^_^――译者)为压缩文件在上下
文菜单中添加的菜单项:
WinZip 编写了增加菜单项的代码,提供了 Explorer 状态栏上的菜单项帮助提示(<y-by
help),并在用户选择一个 WinZip 菜单命令时执行相应的操作。
WinZip 还提供了拖曳扩展处理,此类型跟上下文菜单扩展非常相似,但它是在用户通过右
键拖曳文件时才被触发。下图是 WinZip(也是 WinRA 的h^_^――译者)拖曳文件弹出的菜单项:
还有很多的 shell 扩展类型,Microso? 不断向每一个新的 Windows 版本中增加更多的类型。
现在,让我们把注意力放到上下文菜单扩展上,因为它易于编写,效果也很明显(能够立即让
你满意)。
在动手编码之前,有一些便于编码和调试的小技巧:当 Explorer 调用 shell 扩展(由用户触
发)后,shell 扩展暂时驻于内存中;此时,你无法重新编译此扩展的 DLL 文件。为让 Explorer
更迅速卸载扩展,可以在注册表中创建下面的键:
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\
Explorer\AlwaysUnloadDLL
并设置其默认值为“1”。在 Win9x 平台上,这是最好的办法。在 WinNT 上,可以在下面的键
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\
Explorer
创建一个 DWORD 值 DesktopProcess,也设置它的值为 1。(译者:如下图,Win9x 系统
太少见了)这使得“桌面”和“任务栏”运行于一个进程,其他的 Explorer 窗口运行在其独立进程。
这意味着,你可以调试单个 Explorer 窗口,当你关闭该窗口时,相关的扩展 DLL 就会被自动卸
载,这样就避免了 DLL 文件正被 Windows 使用而无法替换的问题。要使注册表修改生效,需要
注销后重新登录。
稍后,我将说明 Win9x 下如何进行调试。
使用 AppWizard 开始
我们先做一个简单的扩展,它仅仅弹出一个消息框以表明工作正常。我们把它关联到文本
文件,这样,当我们在一个文本文件上右击时,该扩展就会被调用。
好了,让我们开始吧!什么?我还没有告诉你如何使用那些神秘的 shell 扩展接口?别着急,
我会边进行边解释。我觉得,给出一个概念,紧跟着一个示例代码,这样做有助于理解。当然,
我也可以先解释所有的概念,然后列出示例代码,不过这样很难吸引注意力。不管怎样,开启
你的 VC,我们要开始了。
运行 AppWizard,生成一个名为“SimpleExt”的 ATL COM 工程:
剩余17页未读,继续阅读
没有人能xy
- 粉丝: 0
- 资源: 10
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf
- 建筑供配电系统相关课件.pptx
- 企业管理规章制度及管理模式.doc
- vb打开摄像头.doc
- 云计算-可信计算中认证协议改进方案.pdf
- [详细完整版]单片机编程4.ppt
- c语言常用算法.pdf
- c++经典程序代码大全.pdf
- 单片机数字时钟资料.doc
- 11项目管理前沿1.0.pptx
- 基于ssm的“魅力”繁峙宣传网站的设计与实现论文.doc
- 智慧交通综合解决方案.pptx
- 建筑防潮设计-PowerPointPresentati.pptx
- SPC统计过程控制程序.pptx
- SPC统计方法基础知识.pptx
- MW全能培训汽轮机调节保安系统PPT教学课件.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0