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

所以我需要单击这些菜单项之一,例如“退出”。
我知道我应该使用 WinApi 来做到这一点。但是,据我所知,该消息WM_NOTIFY负责通知顶部窗口有关菜单项单击的信息。正如 MSDN 站点所说,For Windows 2000 and later systems, the WM_NOTIFY message cannot be sent between processes. 我要运行我的应用程序的 PC 正在运行 Windows XP,因此我无法将此消息发送到窗口。有没有其他方法可以单击菜单项?
提前致谢。
您的解决方案很可能是特定于应用程序的。带有托盘图标菜单的应用程序通常会注册一个图标并HWND为通知提供自己的窗口句柄,Windows shell 将在其中转发鼠标事件。单击该图标后,该窗口会收到一个转发消息并使用TrackPopupMenuAPI 来显示菜单,并且 - 幸运的是 - 请求将所选菜单项标识符作为WM_COMMAND消息/通知回发到某个窗口,可能是同一个窗口。
因此,您基本上需要的是监视您感兴趣的应用程序,当您单击菜单时,在其进程或线程中生成了哪些消息。Spy++是一个很好的工具。一旦您看到是否有特定消息(命令)作为托盘图标上下文菜单项选择的结果发布到某个窗口,您需要在控制应用程序中找到此窗口,即HWND通过名称、进程名称查找它,然后WM_COMMAND向其发布消息。
这不能保证有效,因为我们正在对菜单在应用程序端的实现方式做出某些假设,但是按照上述策略进行研究是有意义的。
更新。我的 Asus EEE PC 上网本带有 Asus 实用程序,可通过系统托盘图标和菜单切换显示器分辨率。默认分辨率对我不利。这个小应用程序向该实用程序发布了一条命令,以自动更改分辨率。
| 归档时间: |
|
| 查看次数: |
1767 次 |
| 最近记录: |