registry - 使用附加参数将文档设置为 Windows 资源管理器放置目标

标签 registry windows-explorer shell-extensions

我的应用程序是一种“脚本”系统。我已经使用 this answer 中的信息将“脚本”用作放置目标。但是,默认操作是打开脚本进行编辑。要运行它,您需要传递 /r 参数。有什么办法可以:使用Run动词,或者b。传递额外的参数?

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\MyAppJob]
@="MyApp Job"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\MyAppJob\shell]
@="open"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\MyAppJob\shell\open]

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\MyAppJob\shell\open\command]
@="\"C:\\Program Files\\MyApp\\MyApp.exe\" \"%1\" \"%2\" \"%3\" \"%4\" \"%5\" \"%6\" \"%7\" \"%8\""

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\MyAppJob\shell\Run]
@="&Run"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\MyAppJob\shell\Run\command]
@="\"C:\\Program Files\\MyApp\\MyApp.exe\" /r \"%1\" \"%2\" \"%3\" \"%4\" \"%5\" \"%6\" \"%7\" \"%8\""

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\MyAppJob\shellex]

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\MyAppJob\shellex\DropHandler]
@="{60254CA5-953B-11CF-8C96-00AA00B8708C}"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\.myJob]
@="MyAppJob"

(上面的程序名称已更改。)

我尝试将键 "Verb"="Run" 添加到 DropHandler 子项,但当然,事情没那么简单。

我知道我可以将“Run”设置为默认动词,但如果可能的话,我宁愿不必这样做。

最佳答案

好的,正如评论中所建议的,答案是创建我自己的 ShellExtension dll。我看了一下微软提供的示例,但它无法编译,并且 CodeProject 上的示例没有多大意义(我认为它是为不同版本的 VS 编写的)。

然而,经过一番谷歌搜索后,我发现了这个 C# codeproject tutorial ,它向我介绍了 SharpShell ,这是一个用于 shell 扩展的 C# 库。这简化了很多事情:

[ComVisible(true)]
[COMServerAssociation(AssociationType.ClassOfExtension, ".myjob")]
public class MyAppDropHandler : SharpDropHandler
{
    protected override void DragEnter(DragEventArgs dragEventArgs)
    {
        dragEventArgs.Effect = DragDropEffects.Move;
    }

    protected override void Drop(DragEventArgs dragEventArgs)
    {
        new Process
        {
            StartInfo =
            {
                FileName = this.SelectedItemPath,
                Verb = "Run",
                Arguments = String.Join(" ", list.Select(s => String.Format("\"{0}\"", s)))
            }
        }.Start();
    }
}

然后我按照说明注册了扩展 here ,而且看起来效果很好。

关于registry - 使用附加参数将文档设置为 Windows 资源管理器放置目标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17947686/

相关文章:

Windows 上下文菜单外壳图标

windows-7 - Windows 7 中任何地方的命令提示符( native 功能)

.net - In-Proc SxS 打开托管代码中的 shell 扩展?

uwp - 使用 Desktop Bridge 安装 shell 扩展

c++ - 我们可以在不使用 pCmdInfo->lpVerb 的情况下执行右键单击吗

c++ - 在 C++ 中读取 Windows 注册表项 REG_BINARY

powershell - 使用 PowerShell 禁用快速访问文件夹选项

windows - 更改(标准)注册表项的类型(REG_SZ -> REG_EXPAND_SZ)一次

用于查找并关闭 Windows 文件资源管理器对话框的 Powershell 命令

c++ - Linux 的注册表等效项是什么?