pywinauto等待窗口出现并发送按键

时间:2015-07-12 11:46:47

标签: python pywinauto

我试图制作一个小功能,等到某个窗口出现然后发送按键(alt + i),我一直试图用pywinauto做这个但是没有成功。 从我在可以使用的文档中读到的内容

pywinauto.application.WindowSpecification.Exists()

但我无法理解如何指定我要查找的内容,我可以使用窗口标题或进程名称,但无法找到一个好的解释。

另外,除了pywinauto之外还有更好的面板或更容易使用的模块吗?我不需要做复杂的自动化,只需等待一个窗口并发送一些密钥。

修改

好的,我找到了一个解决方案,一个永远循环的简单功能

 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}"并且我无法使用警告模块过滤掉它们,还有另一种方法来过滤\禁用它们吗?这是一个问题,因为当我使用py2exe创建一个exe时,程序关闭后它告诉我有错误,但唯一的错误是我从sendkeys得到的警告。

1 个答案:

答案 0 :(得分:3)

您只需对wait/wait_not对象使用WindowSpecification方法:

from pywinauto.application import Application
app = Application(backend="win32").start('executable')
app.WindowSpecification.wait('enabled').type_keys('%i') # % - alt, ^ - ctrl

WindowSpecification可以设置更多详细信息:

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

window()方法的所有可能参数都与for find_elements function相同(建议不要将此低级函数用于直接使用)。

对于长时间操作,您可以为单个等待设置超时:wait('enabled', timeout=20)或全局设置每个wait的超时:Timings.window_find_timeout = 10

编辑:在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