【问题标题】:C# Creating SystemEvents that can be seen by OTHER ApplicationsC# 创建其他应用程序可以看到的 SystemEvents
【发布时间】:2011-12-02 15:11:51
【问题描述】:

我试图想出一种方法来引发一个可以被多个应用程序看到的公共事件。首先想到的是 SystemEvents。

有没有办法“定义”一个新的 SystemEvent 甚至是多个应用程序可以看到和侦听的公共事件。

【问题讨论】:

  • 系统事件是您真正想要的,还是一个可能的想法?有很多方法可以进行进程间通信 (IPC)。
  • @DaveHillier : 应用程序必须处理事件是否对他们有用。
  • 但是你真的需要使用 SystemEvent 吗? IpcChannel 怎么样,我觉得是支持广播的。

标签: c# events public systemevent


【解决方案1】:

SystemEvents 的底层管道是广播到所有顶级窗口的 Windows 消息。 WM_SETTINGCHANGED 之类的消息。您也可以广播消息,使用 HWND_BROADCAST 调用 SendMessageTimeout。这有点冒险,您将向以前从未见过消息编号的程序发送消息。至少,您需要使用 RegisterWindowMessage() 来确保您获得一个唯一的消息编号,该编号为您和您想要了解通知的进程所知,并且不会混淆其余部分。

还有更可靠、风险更小的机制,例如命名管道服务器。

【讨论】:

    【解决方案2】:

    你真的需要使用 SystemEvent 吗? IPC的其他方法怎么样

    IpcChannel 是一种似乎符合您要求的替代技术。

    【讨论】:

      【解决方案3】:

      我认为没有一种简单的 .Net 内置方法可以做到这一点。我知道的唯一方法是将PostMessageSendMessage 用于Windows 事件队列。您可以阅读详细信息About Messages and Message Queues。在 google 上调用这些本机命令有大量资源,但最好的方法之一是 pinvoke.net

      【讨论】:

        猜你喜欢
        • 2015-01-14
        • 1970-01-01
        • 1970-01-01
        • 2018-09-22
        • 1970-01-01
        • 1970-01-01
        • 2020-11-26
        • 2020-07-24
        • 2014-11-11
        相关资源
        最近更新 更多