在 pywinauto 中,如何右键单击系统托盘中的应用程序图标以打开上下文菜单?

In pywinauto, how can I right click my app icon in the system tray to open the context menu?

如何使用 pywinauto 右键单击​​系统托盘中的应用程序图标和 select 弹出菜单项之一?

我的应用程序位于 Windows 桌面系统托盘中,无法使用 .exe 文件加载。所以我必须右键单击系统托盘图标和 select 弹出菜单项之一才能获得应用程序的 GUI.I 正在尝试使用 python 64 位使用 pywinauto 来实现此目的。

这是我的代码。

app = Application(backend="uia").connect(path="explorer")
sys_tray = app.window(class_name="Shell_TrayWnd")
loc = sys_tray.child_window(title='App name').click()

这是将鼠标位置更改为所需应用程序的图标,但它不是右键单击它,我还想 select 从该弹出菜单中选择一个菜单项。 我怎样才能得到这个?

有方法.click_input(button="right")移动真实光标并执行真实点击。在你的情况下,它看起来是这样的(在 Windows 10 版本 1803 上):

#from __future__ import print_function
from pywinauto import Desktop

d = Desktop(backend='uia')
#d.Taskbar.dump_tree()
main_tray_toolbar = d.Taskbar.child_window(title="User Promoted Notification Area", control_type="ToolBar")
#print(main_tray_toolbar.texts())

icon = main_tray_toolbar.child_window(title_re="Cisco AnyConnect Secure Mobility Client.*", control_type="Button")
icon.click_input(button="right")

#d.ContextMenu.dump_tree()
d.ContextMenu.wait('visible', timeout=10) # flexibly wait up to 10 sec.
d.ContextMenu.child_window(title="About", control_type="MenuItem").invoke()

对有用的调试打印进行了注释(所有 .child_window 规范刚刚从 dump_tree() 输出中复制)。还有一种方法 d.windows() 仅适用于 master 分支(pywinauto 0.6.6 将在最近 2 周内推出)。

评论 Vasily 的回答:因为 windows 和工具栏的名称是本地化的,代码将无法在语言环境不是英语的系统上运行。我通过替换

让这个在法语 Windows 10 系统上工作
main_tray_toolbar = d.Taskbar.child_window(title="User Promoted Notification Area", control_type="ToolBar")

main_tray_toolbar = d.window(class_name='Shell_TrayWnd').child_window(class_name='ToolbarWindow32', control_type="ToolBar")