【问题标题】:How to detect changes to the Windows system tray?如何检测 Windows 系统托盘的更改?
【发布时间】:2013-07-16 04:58:53
【问题描述】:

我有一个 Windows 7 虚拟机,它运行我的强制性公司通信系统(Lync 和 Outlook)。我想做的是在这台 Windows 机器上运行一个进程,它监控系统托盘并向我的主机(Xubuntu 13.04)发送通知,所以当我收到电子邮件或 IM 时我会收到通知(我已经尝试过无缝RDP 这样做,但它是一个无效的解决方案)。

任何面向 Linux 或网络的事情我都可以相对轻松地处理,我不知道如何做的是如何查询 Windows 系统托盘的状态(或附加一个事件侦听器以进行状态更改)。我对 C++ 和 Python 很满意,但我会尝试任何可行的解决方案。

详细的状态信息会更好,但至少我需要能够检测托盘中图标数量的变化。

【问题讨论】:

    标签: c++ python winapi system-tray


    【解决方案1】:

    在 Windows 上,如果您安装了 Visual Studio,在 Visual Studio 工具中有一个有用的工具,名为“Spy++”,基本上它是一个向您显示所有窗口并能够查看特定窗口接收到的消息的工具。

    使用此工具,您可以看到包含“开始按钮”、快捷方式、托盘、时钟等的整个面板是“Shell_TrayWnd”。您可以使用“查找”菜单来搜索特定窗口,只需在任何窗口上拖动“目标”即可。

    托盘窗口本身是“SysPager”(附件图像上的 000100D2),您可以记录此窗口的消息,并查看当您在 Outlook 中接收邮件时此窗口接收的消息类型。

    之后,您可以编写一个代码来监听此窗口接收到的所有消息,并根据您在“Spy++”中看到的内容确定发生了什么。

    这只是开始。编写将获取窗口句柄并侦听窗口接收到的消息的代码是另一部分,但我认为 MSDN 甚至 StackOverflow 已经涵盖了它。 搜索特定窗口句柄由FindWindowEx 函数完成,为了收听消息,您必须设置一个由SetWindowsHookEx 函数完成的“挂钩”。 MSDN 上对 Hooking 的描述非常好。

    【讨论】:

    • “并收听窗口接收到的消息是另一部分,但我认为 MSDN 甚至 StackOverflow 已经涵盖了它”——但这是 问题。你的回答给了它可能的希望,但 IMO 没有回答这个问题。
    【解决方案2】:

    您可能需要 Outlook 检查器 (http://msdn.microsoft.com/en-us/library/office/ff869356(v=office.15).aspx)。据我了解,这有助于观察事件的前景过程。

    【讨论】:

      猜你喜欢
      • 2011-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多