c# - 调用 Windows 资源管理器外壳扩展

标签 c# windows delphi shell-extensions

有没有办法以编程方式调用作为 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 文件调用的动词:

enter image description here

最佳答案

DLL 显然是一个 context-menu extension .如果您想以与 shell 相同的方式调用它,那么您需要托管 DLL 实现的 IContextMenu 接口(interface)。几年前,Raymond Chen 写了一个关于这个主题的广泛系列文章:

如何托管 IContextMenu

  1. Initial foray
  2. Displaying the context menu
  3. Invocation location
  4. Key context
  5. Handling menu messages
  6. Displaying menu help
  7. Invoking the default verb
  8. Optimizing for the default command
  9. Adding custom commands
  10. Composite extensions - groundwork
  11. Composite extensions - composition

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

关于c# - 调用 Windows 资源管理器外壳扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5721700/

相关文章:

delphi - 如何在 TMonthCalendar 中将月份日期加粗时获取年份?

delphi - 我如何知道控件何时可以聚焦?

windows - 如何在 Windows Phone 7 的屏幕上移动手指时从文本字段中选择一部分文本?

Delphi 7 : function crashes upon call in dll, 在 exe 中工作

c# - Discord 机器人只显示不和谐版本

c# - 用于 IEnumerable<string> 的 Visual Studio 可视化工具

php - 同一网络上的 2 个 apache 实例?

Python 到 .bat 的转换

c# - 具有 List<string> 类型模型的 ASP.NET MVC DropDownListFor

c# - 如何在 C# 中扩展 URL?