2
我想在我运行的应用程序触发一个事件,并用URL方案在Windows 10 调用提供参数,我们做了如下注册表项:的Windows URL方案调用运行的程序
HKEY_CLASSES_ROOT
alert
(Default) = "URL:Alert Protocol"
URL Protocol = ""
DefaultIcon
(Default) = "alert.exe,1"
shell
open
command
(Default) = "C:\Program Files\Alert\alert.exe" "%1"
显然,当调用'alert:arg1'时,它总是用一个参数启动我的应用程序的新实例。但是我想让Windows调用我已经运行的实例。
在Mac,这个URL方案的呼叫触发一个事件,我能赶上。正好如我所愿。为此,我将以下部分添加到alert.app/Contents/Info.plist中:
<array>
<dict>
<key>CFBundleURLName</key>
<string>Alert</string>
<key>CFBundleURLSchemes</key>
<array>
<string>alert</string>
</array>
</dict>
</array>
那么我如何在Windows上实现这一点?我在编程这个XOJO应用面向对象的基本的,但我会很高兴的通用解决方案。
的Windows只是将重新启动可执行所以你的问题实在是“如何做IPC在Windows”。我不知道你什么堆支持,但是这通常是由具有EXE完成尝试创建一个命名的互斥体在加载时,如果它不能它知道自己的另一个实例正在运行,此时它使用一个IPC机制,使例如通过发送命名管道来转发其命令行。 –
让您的应用程序单实例(事实上的方法是使用一个互斥)和新启动的情况下将消息发送到已经运行的一个,然后退出。 – CodeCaster
感谢Alex和CodeCaster领导我的正确途径。有了这些信息,我发现了一篇带有工作代码的好文章,并将其作为答案发布。 –