В pywinauto, как я могу щелкнуть правой кнопкой мыши значок моего приложения на панели задач, чтобы открыть контекстное меню?
Как я могу щелкнуть правой кнопкой мыши значок приложения в системном трее и выбрать один из всплывающих элементов меню с помощью pywinauto?
У меня есть приложение в системном трее Windows Desktop, которое нельзя загрузить с помощью файла.exe. Поэтому я должен щелкнуть правой кнопкой мыши значок системного трея и выбрать один из пунктов всплывающего меню, чтобы получить графический интерфейс приложения. Я пытался добиться этого с помощью 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()
Это меняет положение мыши на иконку требуемого приложения, но это не щелчок правой кнопкой мыши на этом, и я хочу выбрать один пункт меню из этого всплывающего окна. как я могу получить это?
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()
это доступно только для основной ветки (в ближайшие 2 недели выйдет pywinauto 0.6.6).
Прокомментируйте ответ Василия: поскольку названия окон и панелей инструментов локализованы, код не будет работать в системах, у которых язык не английский. Я заставил это работать во французской системе 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")