C语言 确定外壳扩展是作为上下文菜单处理程序还是拖放处理程序调用



我想以编程方式确定我的 shell 扩展是作为上下文菜单处理程序还是拖放处理程序调用。我已经使用相同的 CLSID 在适当的位置注册了我的外壳扩展。

注册表:

[HKEY_CLASSES_ROOT*shellexContextMenuHandlers{E991C840-C1EB-455C-AD64-282473005C58}]
@="Test Context Menu"
[HKEY_CLASSES_ROOTDirectoryshellexDragDropHandlersTestDragDrop]
@="{E991C840-C1EB-455C-AD64-282473005C58}"

我对注册表没有问题,我的扩展已加载。

我认为最好的检查位置是在DllGetClassObjectIShellExtInit::Initialize中。

你可以检测shell只想在IShellExtInit.Initialize中工作的扩展类型。对于上下文菜单处理程序,pidlFolder 为零,对于拖放处理程序,pidlFolder 是文件夹的 PIDL。

如果对

多个扩展使用相同的 CLSID,则它不知道正在实例化哪个扩展,除非在系统查询 IContextMenu 时可能QueryInterface()。 如果你真的需要区分,最好只使用单独的CLSID,就像Raymond Chen说的那样。 它们可以映射到同一个 DLL,但这会使您的代码有机会知道正在实例化哪个 CLSID。

相关内容

最新更新