2015-07-12 2 views
2

Я пытаюсь сделать небольшую функцию, которая будет ждать появления определенного окна, а затем отправить нажатие клавиши (alt + i), я пытался делайте это с помощью pywinauto, но без успеха. от того, что я читал в documantation я могу использоватьpywinauto ждать появления окна и отправить нажатие клавиши

pywinauto.application.WindowSpecification.Exists() 

, но я просто не могу понять, как определить то, что я ищу, я могу использовать либо заголовок окна или имя процесса, но не может найти хорошего объяснения.

Кроме того, есть ли тесто или более простой модуль для использования помимо pywinauto? Мне не нужно делать сложную автоматизацию, просто подождите окно и отправьте несколько ключей.

EDIT

Ok я нашел решение, простую функцию, которая зацикливается

def auto_accept(*args): 
    while True: 
     try: 
      app = pywinauto.Application() 
      app.window_(title='Untitled - Notepad').SetFocus() 
      app.window_(title='Untitled - Notepad').TypeKeys("{1}{2}{3}") 
     except (pywinauto.findwindows.WindowNotFoundError, pywinauto.timings.TimeoutError): 
      pass 

Но теперь я всегда получаю предупреждение, как «2015-07-13 12: 18: 02,887 INFO: Набрали текст в Блокнот: {1} {2} {3} ", и я не могу отфильтровать их с помощью модуля предупреждений, есть ли другой способ отфильтровать \ отключить их? это проблема с тех пор, когда я создаю exe, используя py2exe, после закрытия программы он сообщает мне, что есть ошибки, но единственные ошибки - это предупреждение, которое я получаю от sendkeys.

ответ

3

Вы можете просто использовать Wait/WaitNot методы WindowSpecification объекта:

from pywinauto.application import Application 
app = Application.start('executable') 
app.WindowSpecification.Wait('enabled').TypeKeys('%i') # % - alt,^- ctrl 

WindowSpecification можно установить более подробную информацию:

app.Window_(title='Title', class_name='#32770') 

Все возможные параметры для метода Window_ такие же, как for find_windows function.

Для длительной работы вы можете установить тайм-аут для одного Wait: Wait('enabled', timeout=20) или установить тайм-аут для каждого Wait глобально: Timings.window_find_timeout = 10


EDIT: вызвать этот код после import pywinauto отключить протоколирование:

import logging 
logger = logging.getLogger('pywinauto') 
logger.level = logging.WARNING # or higher 

Уровни регистратора:

Level Numeric value 
CRITICAL 50 
ERROR 40 
WARNING 30 
INFO 20 
DEBUG 10 
NOTSET 0 
+0

Спасибо, но я нашел как о том, что работает, на другой ноте, как я могу отключить предупреждения, которые я получаю при отправке нажатий клавиш? я всегда получаю предупреждение типа «2015-07-13 12: 18: 03,100 INFO: напечатанный текст в блокноте: {1} {2} {3}», и я не могу отфильтровать их с помощью модуля предупреждения. –

+0

Потому что это материал модуля регистрации. Обновленный ответ на это. –

+0

pywinauto 0.5.1 будет иметь документированный ярлык: 'pywinauto.actionlogger.disable()' Спасибо за использование. –

Смежные вопросы