Наведите указатель мыши на значок и извлеките текст всплывающей подсказки, используя pywinauto с python

Я хочу навести указатель мыши на сторонний значок (например, «CCleaner», присутствующий в системном трее на панели задач) и получить текст всплывающей подсказки в переменной. В pywinauto методы pywinauto.controls.GetTip(tooltip_index), pywinauto.controls.GetTipText(tooltip_index) и pywinauto.GetToolTipsControl() используются для получения информации всплывающей подсказки. Но в моем коде появляется ошибка. Не уверен, как получить tooptip_index. Фрагмент кода выглядит следующим образом:

import pywinauto
from pywinauto import Application, taskbar

def click_tray_icon():
    app = Application(backend="uia").connect(path="explorer")
    sys_tray = app.window(class_name="Shell_TrayWnd")

    sys_tray.child_window(title="People").click_input(button='left', double=True)
    s = pywinauto.controls.common_controls.ToolTipsWrapper(sys_tray).texts()
    print(s)
    pywinauto.mouse.move(coords=(1729, 1063))

    pywinauto.controls.GetTip(1)
    pywinauto.controls.GetTipText(1)

AttributeError: module 'pywinauto.controls' has no attribute 'GetTip'

person Prachi    schedule 15.01.2019    source источник
comment
Я работаю в операционной системе Windows.   -  person Prachi    schedule 15.01.2019
comment
Виндовс 10? Если да, то какой РС? Последняя Win10 RS5? Это важно, потому что область лотка оболочки была изменена, начиная с Win8.1.   -  person Vasily Ryabov    schedule 21.01.2019
comment
Также Application(backend="uia") предполагает, что вы используете только серверную часть UIA. Но модуль common_controls предназначен для старых backend="win32", а также для упомянутых функций. Конечно, эти функции не определены в папке пакета pywinauto.controls внутри __init__.py, но это только прямой корень этого исключения.   -  person Vasily Ryabov    schedule 21.01.2019
comment
Я бы рекомендовал сначала прочитать Руководство по началу работы, поскольку основная концепция pywinauto требует некоторых обучение. Я подготовлю пример для Win10 RS5 через несколько дней.   -  person Vasily Ryabov    schedule 21.01.2019
comment
Привет Василий, я использую 64-битную операционную систему Windows 10 Enterprise.   -  person Prachi    schedule 21.01.2019
comment
Версия ОС 1803?   -  person Vasily Ryabov    schedule 22.01.2019


Ответы (1)


Что ж, у меня была возможность сделать пример сценария. Но это должно работать на текущей основной ветке (0.6.6 еще не выпущена). Итак, вам нужно установить pywinauto следующим образом:

pip uninstall pywinauto
pip install https://github.com/pywinauto/pywinauto/archive/master.zip

Код содержит все промежуточные отпечатки, чтобы показать, как я его написал. Каждый следующий шаг содержит скопированную спецификацию child_window из предыдущего вывода dump_tree. Я только что удалил ненужные фильтры auto_id="1504", так как не уверен, что эти значения одинаковы во всех версиях Windows.

from __future__ import print_function
from pywinauto import Desktop

d = Desktop(backend='uia')

# print top level windows
# NOTE: method .windows() is not yet available for Desktop in pywinauto==0.6.5
for w in d.windows():
    print(w)

# print Taskbar subtree
d.Taskbar.dump_tree()

main_tray_toolbar = d.Taskbar.child_window(title="User Promoted Notification Area", control_type="ToolBar")

# print titles of main tray area
for text in main_tray_toolbar.texts():
    print(text)

notification_area_expand = d.Taskbar.child_window(title="Notification Chevron", control_type="Button")
notification_area_expand.invoke()
notification_area = d.window(title="Notification Overflow", control_type="Pane")

# print expanded area subtree
notification_area.dump_tree()

# print hidden icon texts
hidden_toolbar = notification_area.child_window(title="Overflow Notification Area", control_type="ToolBar")
for text in hidden_toolbar.texts():
    print(text)
person Vasily Ryabov    schedule 25.01.2019