我之前尝试过这个问题并且它已经关闭了,所以这次我会再次尝试并且更具体。
我正在使用Windows 7和Visual C ++ 2012.如果我从http://code.msdn.microsoft.com/CppShellExtContextMenuHandl-410a709a下载用于编写shell扩展上下文菜单的Microsoft示例代码并将其构建为64位,请使用RegSvr32注册DLL,然后右键 - 单击它工作的.cpp文件 - 上下文菜单中显示一个新命令。在dllmain.cpp文件中有两个对文件扩展名“.cpp”的引用,如果我将它们更改为“.png”,取消注册dll,重建它,再次注册,然后右键单击png文件然后它适用于此,显示菜单命令。现在如果我将其更改为“.dat”然后它不起作用,则没有显示菜单命令。如果我将消息框放在代码中的各个点,那么对于.dat文件没有显示,DLL中的代码似乎没有运行。我已经检查了注册表,据我所知,它已经正确地注册了.dat文件类型,就像我为其他文件类型尝试它时一样。
注册DLL时会设置注册表。当我为.dat文件执行此操作时,它看起来像这样:
HKEY_CLASSES_ROOT\.dat
(Default)=(value not set)
NoOpen=
HKEY_CLASSES_ROOT\.dat\shellex\ContextMenuHandlers\{34FF1CFF-E5CB-4F98-8697-58D64007E7F4}
(Default)=DataFileShellExtContextMenuHandler.FileContextMenuExt
HKEY_CLASSES_ROOT\CLSID\{34FF1CFF-E5CB-4F98-8697-58D64007E7F4}
(Default)=DataFileShellExtContextMenuHandler.FileContextMenuExt Class
HKEY_CLASSES_ROOT\CLSID\{34FF1CFF-E5CB-4F98-8697-58D64007E7F4}\InprocServer32
(Default)=D:\ShellExtTest\x64\Release\CppShellExtContextMenuHandler.dll
ThreadingModel=Apartment
我不知道为什么它适用于某些文件类型而不适用于另一种文件类型。如果有人知道问题可能是什么,或者我如何进一步调查,请告诉我。
我已经链接到代码,解释了我的系统,我做了什么,以及我遇到的问题,如果您需要更多信息,请询问,我会提供。
感谢。