0

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

我的应用程序位于 Windows 桌面系统托盘上,无法使用 .exe 文件加载。所以我必须右键单击系统托盘图标并选择一个弹出菜单项才能获得应用程序的 GUI。我试图使用 pywinauto 使用 python 64 位来实现这一点。

这是我的代码。

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

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

4

2 回答 2

1

.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 周内推出)。

于 2019-02-06T21:53:15.977 回答
1

评论 Vasily 的回答:因为窗口和工具栏的名称是本地化的,所以代码在语言环境不是英语的系统上不起作用。我通过替换让它在法语 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")
于 2020-11-01T09:53:06.483 回答