如何添加新项目以右键单击Windows中的文件夹和文件事件?

我做了谷歌几个教程。

我可以添加右键菜单项到一个文件夹 ,做到这一点:

[HKEY_CLASSES_ROOT\Directory\shell\Command] @="TestRightClick:" [HKEY_CLASSES_ROOT\Directory\shell\Command\Command] @="myExecutable.exe %L" 

我还需要将其添加到FILE中。

1)我在哪里添加它在registry中?

2)如果我select多个文件,如何将parameter passing给我的可执行文件?

有关:

如何通过单击事件(动词)传递多个文件/文件夹path到可执行文件?

  1. 文件具有扩展名的上下文菜单。 将您的命令注册表项添加到适当的扩展名或HKEY_CLASSES_ROOT \ *以影响所有文件。
  2. 您可以使用%1将文件名传递给应用程序(就像您在上面指出的%L一样)。 如果您选择多个文件,则每个文件都将分别调用,就像您单独右键单击每个文件一样。

我不知道任何简单的方法来将右键单击上下文菜单中的多个项目传递给一个可执行实例。

你正在寻找的关键词是“动词”或“处理程序”而不是“事件”。

可以在文件类型的ProgID,感知类型键(如果文件类型具有感知类型),AllFileSystemObjects键或基类键(*)下放置用于特定文件扩展名的上下文菜单动词。

请注意,在HKEY_CLASSES_ROOT配置单元中写入这些密钥会将写入重定向到HKEY_LOCAL_MACHINE\Software\Classes ,并且需要提升权限。 如果您写入到HKEY_CURRENT_USER\Software\Classes树,则可以使用标准用户权限执行此操作。

这取决于你选择多个文件的场景。 您的应用程序的一个实例将按您选择的每个文件启动。 您可以通过检查应用程序的另一个实例是否正在运行来解决此问题,并使用进程间通信来通知现有实例已选择其他扩展。

在MSDN上,一定要阅读

  • 动词和文件关联概述
  • 创建上下文菜单处理程序

你可以用我的程序singleinstance做到这一点。 没有涉及的外壳扩展。

 Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\SystemFileAssociations\.txt\Shell\p4merge] "MultiSelectModel"="Player" [HKEY_CLASSES_ROOT\SystemFileAssociations\.txt\Shell\p4merge\Command] @="\"d:\\singleinstance.exe\" %1 \"C:\\Program Files\\Perforce\\p4merge.exe\" $files --si-timeout 400"