Windows Shell扩展适用于某些文件类型,但不适用于其他文件

时间:2013-12-05 16:28:19

标签: c++ windows shell

我之前尝试过这个问题并且它已经关闭了,所以这次我会再次尝试并且更具体。

我正在使用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

我不知道为什么它适用于某些文件类型而不适用于另一种文件类型。如果有人知道问题可能是什么,或者我如何进一步调查,请告诉我。

我已经链接到代码,解释了我的系统,我做了什么,以及我遇到的问题,如果您需要更多信息,请询问,我会提供。

感谢。

0 个答案:

没有答案