Не удается отправить ключи в фоновое окно. Ошибка : Ошибка атрибута: Не найден ни элемент графического интерфейса (оболочка), ни метод оболочки «send_keys» (опечатка?)

#python #winapi #auto #pywinauto

Вопрос:

Я хочу имитировать нажатие клавиатуры в приложении на задней панели и пытаюсь использовать pywinauto для этого, хотя я могу подключиться к окну, но когда я использую send_keys или keyboard.send_keys, я покажу ошибку

     M.keyboard.send_keys('{a down}')
  File "C:UsersHankanaconda3libsite-packagespywinautoapplication.py", line 180, in __call__
    raise AttributeError("Neither GUI element (wrapper) " 
AttributeError: Neither GUI element (wrapper) nor wrapper method 'send_keys' were found (typo?)
 

ниже приведен мой код
Я пытаюсь найти какой-то ответ в Google, но вижу ту же проблему, поэтому приходите сюда, чтобы задать вопрос.

 import win32gui
from pywinauto.application import Application
from pywinauto.keyboard import send_keys, KeySequenceError
import win32process

def get_window_pid(title):
    hwnd = win32gui.FindWindow(None, title)
    threadid,pid = win32process.GetWindowThreadProcessId(hwnd)
    return pid

hwnd = get_window_pid('Greedy snake')
print(hwnd)
M=app.connect(process=hwnd)
form = app.window(title_re="Greedy snake")
while True:
    sleep(2)

    form.keyboard.send_keys('{a down}')
    form.keyboard.send_keys('{a up}')
 

Комментарии:

1. Используйте автоматизацию пользовательского интерфейса. pywinauto с uia бэкэндом-это готовая к использованию реализация Python.

Ответ №1:

Это совершенно неправильное использование pywinauto и много ненужного кода. keyboard является модулем, это не атрибут form (в сообщении об ошибке говорится, что элемент с именем=»клавиатура», конечно, не найден!). Используйте этот код:

 from pywinauto import Application

app = Application(backend="win32").connect(title_re="Greedy snake", timeout=10)
form = app.window(title_re="Greedy snake")
form.type_keys('{a down}')
form.type_keys('{a up}')
 

Стоит внимательно прочитать документы о pywinauto, начиная с этого: https://pywinauto.readthedocs.io/en/latest/getting_started.html, затем это: https://pywinauto.readthedocs.io/en/latest/wait_long_operations.html