2

我的应用程序是一种“脚本”系统。我使用此答案中的信息使“脚本”可用作放置目标,但是,默认操作是打开脚本进行编辑。要运行它,您需要传递一个/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设置为默认动词,但如果可能的话,我宁愿不必这样做。

4

1 回答 1

2

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

然而,经过一番谷歌搜索,我发现了这个C# 代码项目教程,它向我介绍了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();
    }
}

然后我按照说明在此处注册扩展,它似乎工作得很好。

于 2013-07-31T16:33:50.833 回答