В 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")
Другие вопросы по тегам