我正在尝试提出一种方法来提出一个可以被多个应用程序看到的公共事件。首先想到的是SystemEvents。
有没有办法“定义”一个新的SystemEvent,甚至是一个多个应用程序可以看到和监听的公共事件。
答案 0 :(得分:2)
你真的需要使用SystemEvent吗?如何IPC
的其他方法呢IpcChannel是一种似乎符合您要求的替代技术。
答案 1 :(得分:1)
我认为没有一种简单的.Net内置方法可以做到这一点。我知道的唯一方法是使用PostMessage
或SendMessage
到Windows事件队列。您可以阅读详细信息About Messages and Message Queues。在Google上调用这些本机命令有很多资源,但最好的开始之一是pinvoke.net。
答案 2 :(得分:1)
SystemEvents的底层管道是向所有顶级窗口广播的Windows消息。像WM_SETTINGCHANGED这样的消息。您也可以广播消息,使用HWND_BROADCAST对SendMessageTimeout进行pinvoke。这有点风险,您将向以前从未见过消息编号的程序发送消息。至少你需要使用RegisterWindowMessage()来确保你获得一个你已知的唯一消息编号,以及你想要知道通知的进程,并且不会混淆其余部分。
有更可靠的机制,风险更小,例如命名管道服务器。