将程序添加到资源管理器的右键菜单

将程序添加到资源管理器的右键菜单from http://hi.baidu.com/xstar2008/blog/item/c7642cb5086a70c436d3ca8f.html 2009/10/20 00:22 添加右键菜单可以用注册表的shell项或shellex项。 1 shell项我用过的每台电脑都会被我加上: Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT/Folder/shell/command prompt/command] @="cmd.exe"即将注册表“HKEY_CLASSES_ROOT/Folder/shell/command prompt/command”的默认值设为“cmd.exe”。这样我就可以从命令行快速进入指定目录。 HKEY_CLASSES_ROOT有很多表示文件类型的键。Folder表示文件夹,*表示所有文件。在文件类型下增加“shell/提示字符串/command”项,并将该项的值设为对应的命令行。这样在资源管理器对应文件类型上点右键时,菜单中就会有一个菜单项的内容是“提示字符串”,选择这个菜单项就会执行在command项设置的命令。再看一个例子: Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT/dllfile/shell/Register Component/command] @="regsvr32 /"%L/"" [HKEY_CLASSES_ROOT/dllfile/shell/Unregister Component/command] @="regsvr32 /u /"%L/"" [HKEY_CLASSES_ROOT/ocxfile/shell/Register Component/command] @="regsvr32 /"%L/"" [HKEY_CLASSES_ROOT/ocxfile/shell/Unregister Component/command] @="regsvr32 /u /"%L/"" [HKEY_CLASSES_ROOT/exefile/shell/Register Component/command] @="/"%L/" /regserver" [HKEY_CLASSES_ROOT/exefile/shell/Unregister Component/command] @="/"%L/" /unregserver"这个例子给类型dllfile、ocxfile、exefile增加了“Register Component”和“Unregister Component”命令。这样我们可以直接通过右键菜单注册或卸载组件。在HKEY_CLASSES_ROOT下可以看到.dll、.ocx、.exe的默认值指向了dllfile、ocxfile、exefile。 shell项适合比较简单的命令。如果右键菜单要实现比较复杂的功能,我们就要使用Windows的shell扩展编程接口,即使用shellex项。 2 shellex项 2.1 实现shell扩展的COM组件 UltraEdit的右键菜单用起来很方便。那么它是怎么实现的呢?在注册表里可以看到: [HKEY_CLASSES_ROOT/*/shellex/ContextMenuHandlers/UltraEdit-32] @="{b5eedee0-c06e-11cf-8c56-444553540000}"“{b5eedee0-c06e-11cf-8c56-444553540000}”是一个COM组件的uuid。在“HKEY_CLASSES_ROOT/CLSID”下可以找到 Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT/CLSID/{b5eedee0-c06e-11cf-8c56-444553540000}] @="UltraEdit" [HKEY_CLASSES_ROOT/CLSID/{b5eedee0-c06e-11cf-8c56-444553540000}/InProcServer32] @="C://Program Files//IDM Computer Solutions//UltraEdit-32//ue32ctmn.dll" "ThreadingModel"="Apartment"ue32ctmn.dll就是UltraEdit提供的实现了shell扩展功能的COM组件。这个COM组件如果实现了IContextMenu接口,就可以增加右键菜单。菜单项的图标文本是在IContextMenu接口的QueryContextMenu函数中指定的。用户选择菜单项后,Windows会调用IContextMenu接口的InvokeCommand函数,我们在这个函数中实现菜单对应的功能。 我们通常用ATL实现COM组件。因为VC提供了完善的向导,所以用ATL实现一个COM组件其实并不复杂。在网上可以找到一篇叫作《Windows Shell扩展编程完全指南》的chm,包含了实现shell扩展编程的详细指导。这是翻译的文章,chm中也包括了原文(因为转载需要译者同意,我就不提供下载了)。示例代码可以从原文网站下载,我也整理了 一份。使用ALT向导,再仿照示例代码,我们很容易建立自己的工程。然后在QueryContextMenu和InvokeCommand函数中定制自己的菜单项显示和功能。可以把《Windows Shell扩展编程完全指南》当作游戏攻略,找到自己感兴趣的部分,照着做就行了。 2.2 添加和移除菜单添加菜单除了注册组件外,只要在对应文件类型下增加一项“shellex/ContextMenuHandlers/描述性名称”,并将该项的值设为组件的uuid。uuid是在建立ATL工程时自动生成的。注册组件也是通过在注册表添加一些项目完成的。移除菜单时只要删除注册表的相应项目就可以了。 请注意,“shellex/ContextMenuHandlers”下的“描述性名称”虽然没什么用,但应该能让用户看明白这个扩展是哪个程序加的。例如“Beyond Compare 2”就起了一个奇怪的名字,所以被我删掉了。后来我发现BC2的右键菜单没有了,就在CLSID中找到BC2的dll文件的uuid,然后在“*/shellex/ContextMenuHandlers”加了个 “BC2”项,默认值填上uuid就可以了。 组件相关的注册表项目可以见建立ATL工程时自动生成的rgs文件,以及DllRegisterServer和DllUnregisterServer函数。 以cnbook为例,增加右键菜单需要增加以下注册表项目: Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT/*/shellex/ContextMenuHandlers/cnbook] @="{5BB33E44-519C-42A8-8ABF-81478C57A503}" [HKEY_CLASSES_ROOT/CLSID/{5BB33E44-519C-42A8-8ABF-81478C57A503}] @="Shellapi.OpenExt" [HKEY_CLASSES_ROOT/CLSID/{5BB33E44-519C-42A8-8ABF-81478C57A503}/InProcServer32] @="D://projects//cnbook//cnbook//shellapi.dll" "ThreadingModel"="Apartment" [HKEY_CLASSES_ROOT/CLSID/{5BB33E44-519C-42A8-8ABF-81478C57A503}/ProgID] @="Shellapi.OpenExt" [HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Shell Extensions/Approved] "{5BB33E44-519C-42A8-8ABF-81478C57A503}"="Shellapi.OpenExt"只要删除这些项目就可以移除菜单。 ProgID就是在插入ATL对象时填写的ATL对象名称。组件路径可以在程序中根据应用程序所在目录确定。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Windows右键菜单管理是指对Windows操作系统中的右键菜单进行管理和定制的一项功能。右键菜单是当用户在桌面或者文件资源管理器中点击鼠标右键时弹出的菜单项,它提供了各种操作选项,便于用户快速执行相关操作。 首先,Windows右键菜单管理可以用于添加自定义的菜单项。用户可以通过一些第三方软件或者系统自带的注册表编辑工具,定制右键菜单中的菜单项,以方便执行常用的操作和访问特定的功能。例如,可以添加一个“发送到”菜单项,实现快速发送文件到指定位置的功能。 其次,右键菜单管理还可以用于删除或禁用系统自带的菜单项。有时候,系统默认的一些菜单项可能并不常用,用户可以通过管理工具将其删除,以简化右键菜单的显示。另外,当某个菜单项被误操作或者用不到时,也可以禁用它,以避免对系统造成意外损害。 另外,通过右键菜单管理还可以对特定文件类型进行关联。用户可以将特定的文件类型与某个程序进行关联,使得在右键菜单中出现该文件类型相关的操作选项。例如,可以将.txt文件关联到文本编辑器,.mp3文件关联到音乐播放器等等。 总之,Windows右键菜单管理可以帮助用户自定义和优化右键菜单,提高操作效率和使用便捷性。但需要注意的是,修改右键菜单前需谨慎操作,避免对系统造成不必要的问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值