如何检测Windows系统托盘的更改?

8
我有一个运行强制性企业通信系统 (Lync 和 Outlook) 的 Windows 7 虚拟机。我想在这台 Windows 机器上运行一个进程,监控系统托盘并向我的主机 (Xubuntu 13.04) 发送通知,以便我在收到电子邮件或即时消息时得到通知 (我已经尝试过无缝 RDP 进行此操作,但这是一种无效的解决方案)。
任何 Linux 或网络相关的操作我都可以相对容易地处理,但我不知道如何查询 Windows 系统托盘的状态(或者附加一个事件监听器以进行状态更改)。我熟悉 C++ 和 Python,但我会尝试任何可行的解决方案。
最好提供详细的状态信息,但至少需要能够检测托盘中图标数量的变化。
2个回答

3
在Windows系统中,如果你安装了Visual Studio,其中包含一个有用的工具叫做“Spy++”,它基本上是一个能够展示所有窗口并且可以查看特定窗口接收到的消息的工具。
使用这个工具,你可以看到整个面板,包括“开始按钮”、快捷方式、托盘、时钟等,都属于“Shell_TrayWnd”。你可以使用“查找”菜单来搜索特定窗口,只需要将“瞄准器”拖动到任何窗口即可。
托盘窗口本身是“SysPager”(附图中的000100D2),你可以记录该窗口的消息并查看Outlook在接收邮件时该窗口接收到的消息类型。
之后,你可以编写代码来监听该窗口接收到的所有消息,并根据在“Spy++”中看到的内容来确定发生了什么。
这只是一个开始。编写一个能够获取窗口句柄并监听窗口接收到的消息的代码是另一部分,但我认为这已经在MSDN甚至StackOverflow上有所涉及。 通过FindWindowEx函数可以找到特定窗口句柄,而要监听消息,则需要设置一个“钩子”,这可以通过SetWindowsHookEx函数来完成。在MSDN上已经对钩子进行了详细的描述。

3
“而监听窗口接收到的消息则是另一个部分,但我认为这已经在MSDN甚至StackOverflow上有详细介绍了。”-- 但这就是问题被问到的内容。你的回答给了希望,说明这是可能的,但在我看来并没有回答问题。 - Brian Cain

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接