我想以编程方式确定我的shell扩展是否被称为上下文菜单处理程序或拖放处理程序。我已在适当的位置使用相同的CLSID注册了我的shell扩展。
注册表:
[HKEY_CLASSES_ROOT\*\shellex\ContextMenuHandlers\{E991C840-C1EB-455C-AD64-282473005C58}]
@="Test Context Menu"
[HKEY_CLASSES_ROOT\Directory\shellex\DragDropHandlers\TestDragDrop]
@="{E991C840-C1EB-455C-AD64-282473005C58}"
我没有注册表问题,我的扩展程序已加载。
我认为最好检查的地方是 DllGetClassObject 或 IShellExtInit :: Initialize 。
答案 0 :(得分:3)
您可以检测shell只想在IShellExtInit.Initialize中工作的扩展类型。对于上下文菜单处理程序pidlFolder为零,对于拖放处理程序,pidlFolder是文件夹的PIDL。
答案 1 :(得分:0)
如果对多个扩展使用相同的CLSID,则它不知道正在实例化哪个扩展,除非在系统查询QueryInterface()
时可能在IContextMenu
中。如果你真的需要区分,最好只使用单独的CLSID,就像Raymond Chen说的那样。它们可以映射到相同的DLL,但这使您的代码有机会知道正在实例化哪个CLSID。