调用windows explorer shell扩展

Raf*_*cci 3 c# windows delphi shell-extensions

有没有办法以编程方式调用DLL扩展的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"="Apartment"

[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文件的动词:

在此输入图像描述

Rob*_*edy 11

DLL显然是上下文菜单扩展.如果你想以与shell相同的方式调用它,那么你想要托管 DLL实现的IContextMenu接口.几年前,Raymond Chen撰写了一篇关于这个主题的广泛系列文章:

如何托管IContextMenu

  1. 初步尝试
  2. 显示上下文菜单
  3. 调用位置
  4. 关键背景
  5. 处理菜单消息
  6. 显示菜单帮助
  7. 调用默认动词
  8. 优化默认命令
  9. 添加自定义命令
  10. 复合扩展 - 基础工作
  11. 复合扩展 - 组合

前两篇文章是最重要的.他们首先介绍如何获取文件的IContextMenu接口,然后介绍如何调用该菜单提供的一个或多个命令.基本上,获取IContextMenu接口,填充CMINVOKECOMMANDINFOEX结构,然后将其传递给接口的InvokeCommand方法.文章调用TrackPopupMenu向用户显示菜单,然后使用选择来填充结构,但如果您已经确切地知道要运行哪个命令,则可以放弃显示菜单.(但是,您可能仍然需要创建菜单,因为IContextMenu对象可能希望首先QueryContextMenu调用它.)

  • 不知道,@大卫.他问如何*调用DLL* - 但我猜你从经验中知道回答问题*如果被问到*会让我们陷入困境.但即使他确实使用了ShellExecuteEx,他仍然需要经过一次这个程序才能找到可用的动词,因为它们不在注册表中. (4认同)

RRU*_*RUZ 6

拉斐尔,你可以使用IContextMenu界面.从这里你可以枚举接口返回的条目,然后执行你想要的选项InvokeCommand

  • 请查看此问题http://stackoverflow.com/questions/3777121/how-to-access-windows-shell-context-menu-items和Craig Peterson的回答. (2认同)