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

2024-04-22 08:58:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试创建一个小函数,该函数将等待某个窗口出现,然后发送一个按键(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:02887 INFO:Typed text to the Notepad:{1}{2}{3}”,我无法使用warnings模块过滤它们,有没有其他方法过滤/禁用它们?这是一个问题,因为当我使用py2exe创建一个exe时,程序关闭后会告诉我有错误,但唯一的错误是我从sendkeys得到的警告。


Tags: 模块函数app警告applicationtitle错误exists
1条回答
网友
1楼 · 发布于 2024-04-22 08:58:09

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

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 

相关问题 更多 >