有没有办法以编程方式调用作为 shell 扩展的 DLL?我们使用在 Windows 资源管理器上注册 shell 扩展的软件,我需要调用其上下文菜单中可用的项目之一。我没有要调用的软件源码。
编辑
此上下文菜单仅在我在 Windows 资源管理器中选择 PDF 文件时出现。所以我需要调用它传递一个 dll 文件。
编辑
注册信息:
[HKEY_CLASSES_ROOT\CLSID{2DC8E5F2-C89C-4730-82C9-19120DEE5B0A}] @="PDFTransformer3.PDFTContextMenu.1"
[HKEY_CLASSES_ROOT\CLSID{2DC8E5F2-C89C-4730-82C9-19120DEE5B0A}\InprocServer32] @="C:\Program Files\ABBYY PDF Transformer 3.0\PDFTContextMenu.dll" "ThreadingModel"="公寓"
[HKEY_CLASSES_ROOT\CLSID{2DC8E5F2-C89C-4730-82C9-19120DEE5B0A}\ProgID] @="PDFTransformer3.PDFTContextMenu.1"
[HKEY_CLASSES_ROOT\CLSID{2DC8E5F2-C89C-4730-82C9-19120DEE5B0A}\可编程]
[HKEY_CLASSES_ROOT\CLSID{2DC8E5F2-C89C-4730-82C9-19120DEE5B0A}\VersionIndependentProgID] @="PDFTransformer3.PDFTContextMenu"
编辑
是否可以用我想要的动词(不是默认的)调用 ShellExecuteEx
?如果是这样,我该如何调用我想要的动词(使用 DLL)?
这就是我想为 PDF 文件调用的动词:
最佳答案
DLL 显然是一个 context-menu extension .如果您想以与 shell 相同的方式调用它,那么您需要托管 DLL 实现的 IContextMenu 接口(interface)。几年前,Raymond Chen 写了一个关于这个主题的广泛系列文章:
如何托管 IContextMenu
- Initial foray
- Displaying the context menu
- Invocation location
- Key context
- Handling menu messages
- Displaying menu help
- Invoking the default verb
- Optimizing for the default command
- Adding custom commands
- Composite extensions - groundwork
- Composite extensions - composition
前两篇文章是最重要的。它们介绍了如何首先获取文件的 IContextMenu 接口(interface),然后如何调用该菜单提供的一个或多个命令。本质上,get the IContextMenu interface ,填充一个CMINVOKECOMMANDINFOEX结构,然后传递给接口(interface)的InvokeCommand
方法。文章调用TrackPopupMenu
向用户显示菜单,然后使用选择填充结构,但如果您已经确切知道要运行哪个命令,则可以放弃显示菜单。 (尽管如此,您可能仍然需要创建菜单,因为 IContextMenu 对象可能希望先调用 QueryContextMenu
。)
关于c# - 调用 Windows 资源管理器外壳扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5721700/