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

qpgpyjmq  于 2023-05-01  发布在  Windows
关注(0)|答案(4)|浏览(129)

我在google上做了几个教程。
我可以通过以下操作将右键菜单项添加到文件夹中:

[HKEY_CLASSES_ROOT\Directory\shell\Command]
@="TestRightClick:"

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

我也需要把它添加到文件中。

1)在注册表中的哪里添加?
2)如果我选择了多个文件,我如何将参数传递给我的可执行文件?

相关内容:

How to pass in multiple file/folder paths via a rigth-click event(verb) to an executable?

iibxawm4

iibxawm41#

你可以用我的程序singleinstance来做。不涉及shell扩展。

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"
pprl5pva

pprl5pva2#

您要查找的关键词是“动词”或“处理程序”,而不是“事件”。
特定文件扩展名的上下文菜单 predicate 可以放置在文件类型的ProgID、感知类型键(如果文件类型具有感知类型)、AllFileSystemObjects键或基类键(*)下。
请注意,在HKEY_CLASSES_ROOT配置单元中写入这些键会将写入重定向到HKEY_LOCAL_MACHINE\Software\Classes,并且需要提升的权限。如果写入HKEY_CURRENT_USER\Software\Classes树,则可以使用标准用户权限执行此操作。
由您来处理选择多个文件的情况。每个选定的文件都将启动一个应用程序示例。您可以通过检查应用程序的另一个示例是否正在运行,并使用进程间通信通知现有示例已选择其他扩展来解决此问题。
在MSDN上,请务必阅读

ldfqzlk8

ldfqzlk83#

1.文件具有上下文菜单的扩展名。将Command注册表项添加到相应的扩展名或HKEY_CLASSES_ROOT* 以影响所有文件。
1.您可以使用%1将文件名传递给应用程序(与上面使用%L所指示的非常相似)。如果选择多个文件,则每个文件都将被单独调用,就像您分别右键单击每个文件一样。
我不知道有什么简单的方法可以将多个项目从右键单击上下文菜单传递到一个可执行示例。

mpbci0fu

mpbci0fu4#

请参阅GitHub SingleInstanceAccumulator,了解一个C#实现的Mutex + COPYDATA方法。
other stack-o's表示需要。

资源管理器上下文菜单配置

::creates the entry
:: and crucial multi-file handling property
reg add "HKEY_CLASSES_ROOT\FileType\shell\YourNewContextMenu" /f /v "MultiSelectModel" /d "Player"

::your desired command line
reg add "HKEY_CLASSES_ROOT\FileType\shell\YourNewContextMenu\command" /f /ve /t REG_EXPAND_SZ /d "***see command line examples***"

例如在我的系统上,为“。mov”文件,我会将上面的FileType替换为VLC.mov

复杂REG ADD示例

将上面的“参见命令行示例”替换为您想要的命令行。
注意:引号&环境变量必须转义,初始命令的转义工作与字符串后面的转义工作略有不同!?!

λ reg add "HKEY_CLASSES_ROOT\VLC.mov\shell\Transcode\command" /f /ve /t REG_EXPAND_SZ /d "\"^%bin^%\SingleInstanceAccumulator\" -f \"-c:powershell -ExecutionPolicy bypass "\"^%bin^%\test.ps1\"" -list '$files'\" \"%1\""

SingleInstanceAccumulator。exe用法

"-c:command line" (default: cmd /c echo $files && pause)
  $files will be replace with aggregated list

-f = output each item on separate line to new tempfile
  $files will be replaced by the tempfile path
  quote will default to nothing

-d:delimiter (default: ,)
-q:quote (default: ")
-t:timeout millisecs (default: 200)
-w = hidden launch
-v = debug output

命令行示例

注意:初始命令必须有路径shell〉命令工作

PowerShell &临时文件

注意:-f用法

"%bin%\SingleInstanceAccumulator" -f "-c:powershell -ExecutionPolicy bypass "%bin%\test.ps1" -list '$files'" "%1"

PowerShell & inline 文件列表

注:-q用法

"%bin%\SingleInstanceAccumulator" -q:' "-c:powershell -ExecutionPolicy bypass "%bin%\test.ps1" -list $files" "%1"

test.ps1(带临时文件)

powershell
param(
  [String]$listFilePath
)

gc $listFilePath | % { $_ }

pause

erase $listFilePath

pause

test.ps1(带文件数组parm)

param(
  [String[]]$filesList
)

$filesList | % { $_ }

pause

相关问题