bounty将于明天到期。此问题的答案可获得+50声望奖励。Eric Ballard正在寻找此问题的更详细答案。
我想以与在Windows 10上使用特定上下文菜单操作时相同的方式编程启动应用程序。
上下文菜单是由应用程序Proxifier提供的,所以从我的研究中,我能够在我的注册表中找到这个,我相信这是相关的上下文菜单条目。
但是,只有一个可见参数,它似乎是初始化Proxifier设置所请求的用户配置文件的路径。
尝试了几种不同的组合,并不能真正找出任何东西在那里......所以我想到的另一件事是检查窗口消息发送到Proxifier时,点击上下文菜单,与间谍++。
我已经做了,我只是不能似乎破译wParam或lParam或什么信息,我会发送,以选择正确的子菜单的行动。
任何帮助在这里将非常感激,谢谢!
2条答案
按热度按时间xt0899hw1#
虽然这不是一个完整的答案,但它可能会指导你。
代理程序通过dll实现Shell扩展。
您可以在C:\Windows\System32\ProxifierShellExt.dll中找到它
由于这些是作为Context Menu Handler实现的
总之,您需要以与shell相同的方式托管IContextMenu接口。
如果您熟悉COM接口和Windows API,您可以给予一下。
This回答中有更详细的描述。
还有一个系列从可怕的“旧的新的东西”博客,但链接(发现在该答案)不工作了。
我希望这有帮助!
jm81lzqq2#
我无法弄清楚如何通过访问上下文菜单来让它工作,我知道这在技术上是你的问题。然而,我相信我有一个变通办法,希望能对你有用。
此解决方法涉及复制代理程序配置文件(这只是一个xml格式的文件),并创建一个新的配置文件。在新的配置文件,我们创建一个新的规则与您指定的应用程序和所需的行动(直接,阻止,代理)并将其插入到规则列表的顶部,以便首先执行规则。然后启动应用程序。脚本将等待应用程序关闭,然后重新启动选择旧配置文件。
例如,运行脚本以阻止应用程序将是这样的:
应用程序将添加到规则列表的顶部。
在proxifier日志窗口中,您将看到proxifier加载新配置文件,然后在应用程序关闭时重新加载旧配置文件。
--
该脚本具有以下规则选项,这些选项是代理程序中的规则操作选项(阻止、直接、代理):
Proxifier保存您的代理列表,并为每个代理都有一个id。因此,当使用proxy参数时,您需要所需代理的id号(例如100,101)。要运行列表:
将
profilePath
和savePath
更改为您所需的位置。我已经测试过了,它确实成功地为所有操作设置了规则。这种方式不适用于proxifier。但可能适用于某些用例,例如我在这里使用7-zip的示例。因此我将离开这一部分。
访问文件上下文菜单中的某些项似乎非常困难(甚至可能是不可能的)在powershell中。我目前无法安装Proxifier,但我一直在用7-zip测试。我发现this blog post,它详细说明了如何在powershell中访问文件的上下文菜单项。这个问题,这也是在帖子中提到的是,有些项目只是不能很容易地访问(与子菜单的项目似乎不显示与此方法)。
使用post中的代码的示例输出如下:
你可以看到相同文件的上下文菜单截图的输出的不同之处,你会看到“7-zip”选项丢失。这很可能也是Proxifier的情况:
所以,我的解决办法,虽然不是很优雅,是创建一个new context menu item(链接来自@mklement0对您的帖子的评论)。下面将创建一个新的上下文菜单项,名为customCommand。它使用您提到的类似格式的命令,但使用7-zip
C:\Program Files\7-Zip\7zFM.exe "%1"
打开文件。运行上面的命令将创建以下注册表项:
可以看到新增了快捷菜单项customCommand,所有文件都会新增:
重新运行上面的
$file.verbs()
命令,我们可以看到我们的新条目现在已经列出(部分输出):现在我们可以通过运行以下命令来访问该项目:
现在把所有这些放在一起,我们可以:
代码:
命令行上的输出将如下(程序应启动):
理论上,这应该可以按照你想要的方式打开Proxifier。如果其他程序遵循与7-zip相同的格式,它也应该以类似的方式与其他程序一起工作。