您可以在注册表中使用shell项或shellex项添加右键单击菜单。
1个壳项
我使用过的每台计算机都会由我添加:
Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT/Folder/shell/command prompt/command] @="cmd.exe"
注册表“ HKEY_CLASSES_ROOT /文件夹/ shell /命令提示符/命令”的默认值设置为“ cmd.exe”。这样,我可以从命令行快速输入指定的目录。
HKEY_CLASSES_ROOT具有许多指示文件类型的键。文件夹表示文件夹,*表示所有文件。在文件类型下添加“ shell /提示字符串/命令”项,并将此项的值设置为相应的命令行。这样,在资源管理器中右键单击相应的文件类型时,菜单中将出现一个菜单项,其内容为“提示字符串”,选择此菜单项将执行命令中设置的命令项目。再看一个例子:

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类型。这样,我们可以通过右键单击菜单直接注册或卸载组件。在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提供的COM组件,用于实现Shell扩展功能。如果此COM组件实现IContextMenu接口,则可以添加一个右键单击菜单。菜单项的图标文本在IContextMenu接口的QueryContextMenu函数中指定。用户选择菜单项后,Windows将调用IContextMenu接口的InvokeCommand函数,我们将在该函数中实现与菜单相对应的函数。
我们通常使用ATL来实现COM组件。由于VC提供了完整的向导,因此使用ATL实现COM组件并不复杂。您可以在Internet上找到一个名为“ Windows Shell扩展编程完整指南”的chm,其中包含有关实现Shell扩展编程的详细说明。这是一篇翻译过的文章,chm中也包含原始文本(因为转载需要翻译者的同意,因此我将不提供其下载)。可以从原始网站上下载示例代码,并且我还编写了一份副本。使用ALT向导并模仿示例代码,我们可以轻松地构建自己的项目。然后在QueryContextMenu和InvokeCommand函数中自定义菜单项的显示和功能。您可以将“ Windows Shell扩展编程完全指南”用作游戏策略,找到您感兴趣的部分,然后按照它进行操作。
2.2添加和删除菜单
除了注册组件外,添加菜单仅需要在相应的文件类型下添加一个项目“ shellex / ContextMenuHandlers /描述性名称”,并将此项目的值设置为组件的uuid。创建ATL项目时,会自动生成uuid。还可以通过向注册表添加一些项目来完成组件注册。删除菜单时,只需删除注册表中的相应项。
请注意,尽管“ shellex / ContextMenuHandlers”下的“描述性名称”没有用,但它应允许用户查看哪个程序添加了扩展名。例如,“超越比较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对象的名称。可以根据应用程序所在的目录在程序中确定组件路径。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-355669-1.html
哪个行业不都是少数人赚钱