查找并模拟点击系统托盘图标?

Rec*_*als 5 windows winapi contextmenu system-tray click

我需要弄清楚如何以编程方式从单独的应用程序的系统托盘图标中查找并选择上下文菜单项。我能想象实现这一点的唯一方法是使用 mouse_event() 和一些硬编码的 x/y 值,并将图标设置为始终显示。除了一般的硬编码的黑客使用之外,这里的问题是假设图标将保留其位置(这可能会在其他应用程序加载/卸载时中断)。我想知道是否有人知道任何其他方法来解决这个问题?

Jon*_*ter 4

根据应用程序的编写方式,从上下文菜单中选择该项目将导致一条WM_COMMAND消息发布到属于该应用程序的窗口。您可以使用 Spy++ 等工具来检查这一点。如果是这种情况,那么您所要做的(理论上)就是模拟该消息。

如果应用程序不用于WM_COMMAND接收上下文菜单中的选择,那么您的工作就会困难得多。没有记录的方法可以发现系统托盘项的位置和标识,因此硬编码 x/y 值的方法可能是您拥有的最佳选择。

  • 当您从上下文菜单中选择命令时,“WM_COMMAND”消息将被发布到拥有托盘图标的窗口。它实际上根本不进入托盘窗口。您需要停止将其视为托盘菜单命令,而开始将其视为属于恰好从托盘菜单触发的应用程序的菜单。 (5认同)
  • 如果没有窗口拥有托盘图标,托盘图标就不可能存在,仅仅因为它在屏幕上不可见并不意味着它不存在。窗口类和窗口标题几乎肯定总是相同的。使用 Spy++ 找出它们是什么。将这些字符串硬编码到您的应用程序中,然后您的应用程序可以调用“FindWindowEx”来查找窗口并向其发布消息。 (3认同)