我试图做一个小功能,它将等待直到某个窗口出现,然后发送一个按键(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信息:在记事本中键入文本:{1} {2} {3}”之类的警告,并且我无法使用警告模块将其过滤掉,还有另一种过滤\禁用它们的方法吗?这是一个问题,因为当我使用py2exe创建exe时,程序关闭后它告诉我有错误,但是唯一的错误是我从sendkeys收到的警告。

最佳答案

您可以简单地将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

关于python - pywinauto等待窗口出现并发送按键,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31367425/

10-09 07:39