我的应用程序是一种“脚本”系统。我已经使用 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/