1

我正在编写一个应用程序,我需要在其中单击另一个应用程序托盘图标菜单中的菜单项。这是一个更好理解的屏幕截图,因为我不擅长解释东西。 截图示例
所以我需要单击其中一个菜单项,例如“退出”。

我知道我应该使用 WinApi 来做到这一点。但是,据我所知,消息WM_NOTIFY负责通知顶部窗口有关菜单项的单击。正如 MSDN 网站所说,For Windows 2000 and later systems, the WM_NOTIFY message cannot be sent between processes. 我要运行我的应用程序的 PC 正在运行 Windows XP,因此我无法将此消息发送到窗口。有没有其他方法可以点击菜单项?

提前致谢。

4

1 回答 1

5

您的解决方案很可能是特定于应用程序的。带有托盘图标菜单的应用程序通常做的是注册一个图标并为通知提供自己的窗口句柄HWND,Windows shell 将在其中转发鼠标事件。单击图标后,窗口会收到转发的偶数并使用TrackPopupMenuAPI 显示菜单,并且 - 幸运的是 - 请求将选定的菜单项标识符发送回某个窗口,可能与WM_COMMAND消息/通知相同的窗口。

因此,您基本上需要监视您感兴趣的应用程序,当您单击菜单时,在其进程或线程中生成了哪些消息。Spy++是一个很好的工具。一旦您看到是否有特定消息(命令)由于托盘图标上下文菜单项选择而发布到某个窗口,您在控制应用程序中所需要做的就是找到该窗口,即HWND按名称、进程名称查找它,然后WM_COMMAND向其发布消息。

这不能保证有效,因为我们正在对菜单在应用程序端的实现方式做出某些假设,但是按照上述策略进行研究是有意义的。

UPD。我的华硕 EEE PC 上网本附带华硕实用程序,可通过系统托盘图标和菜单切换显示器分辨率。默认分辨率对我不利。这个小应用程序向该实用程序发布了一个命令以自动更改分辨率。

于 2012-08-02T17:06:59.040 回答