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

时间:2019-02-06 01:27:12

标签: python windows automation pywinauto qsystemtrayicon

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

我的应用程序位于Windows桌面系统托盘上,无法使用.exe文件加载。因此,我必须右键单击systemtray图标并选择弹出菜单项之一才能获取应用程序的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()

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

2 个答案:

答案 0 :(得分: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")

答案 1 :(得分:0)

有一种方法.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周内推出)。