代码之家  ›  专栏  ›  技术社区  ›  Chicago

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

  •  7
  • Chicago  · 技术社区  · 16 年前

    我在谷歌上做了几篇教程。

    文件夹 通过这样做:

    [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?

    4 回复  |  直到 9 年前
        1
  •  10
  •   zenden2k    10 年前

    你可以用我的程序来做 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"
    
        2
  •  7
  •   Factor Mystic    16 年前

    您要查找的关键词是“动词”或“处理程序”,而不是“事件”。

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

    请注意,在 HKEY_CLASSES_ROOT HKEY_LOCAL_MACHINE\Software\Classes HKEY_CURRENT_USER\Software\Classes 树,您可以使用标准用户权限执行此操作。

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

    在MSDN上,请务必阅读

        3
  •  3
  •   Jason R. Coombs    16 年前

    我不知道有什么简单的方法可以将多个项目从右键单击上下文菜单传递到一个可执行实例。

        4
  •  0
  •   Beej    8 年前

    GitHub SingleInstanceAccumulator 对于一个C#实现的老掉牙的互斥+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***"
    

    e、 在我的系统上,对于“.mov”文件,我将替换 FileType 高于 VLC.mov

    替换“ *请参见命令行示例* “使用所需的命令行。
    注: 引用 & 环境变量 必须进行转义,并且转义的工作方式对于初始命令与字符串中的后续命令略有不同!?!

    λ 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\""
    

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

    命令行示例

    注: 初始命令必须具有路径

    PowerShell&临时文件

    注: 使用

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

    PowerShell& 内联 文件列表

    注: 使用

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

    powershell
    param(
      [String]$listFilePath
    )
    
    gc $listFilePath | % { $_ }
    
    pause
    
    erase $listFilePath
    
    pause
    

    test.ps1(带有文件数组parm)

    param(
      [String[]]$filesList
    )
    
    $filesList | % { $_ }
    
    pause