from pywinauto import Application
# 启动记事本应用程序
app = Application().start("notepad.exe")
# 连接到记事本窗口
window = app["notepad"]
# 打印记事本窗口中的所有控件
window.print_control_identifiers()
运行之后报错,求解决办法
F:\python\Lib\site-packages\pywinauto\application.py:1053: RuntimeWarning: Application is not loaded correctly (WaitForInputIdle failed)
warnings.warn('Application is not loaded correctly (WaitForInputIdle failed)', RuntimeWarning)
Traceback (most recent call last):
File "F:\python\Lib\site-packages\pywinauto\application.py", line 248, in __resolve_control
ctrl = wait_until_passes(
^^^^^^^^^^^^^^^^^^
File "F:\python\Lib\site-packages\pywinauto\timings.py", line 458, in wait_until_passes
raise err
pywinauto.timings.TimeoutError
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "F:\py\yd.py", line 10, in <module>
window.print_control_identifiers()
File "F:\python\Lib\site-packages\pywinauto\application.py", line 595, in print_control_identifiers
this_ctrl = self.__resolve_control(self.criteria)[-1]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "F:\python\Lib\site-packages\pywinauto\application.py", line 259, in __resolve_control
raise e.original_exception
File "F:\python\Lib\site-packages\pywinauto\timings.py", line 436, in wait_until_passes
func_val = func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^
File "F:\python\Lib\site-packages\pywinauto\application.py", line 201, in __get_ctrl
dialog = self.backend.generic_wrapper_class(findwindows.find_element(**criteria[0]))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "F:\python\Lib\site-packages\pywinauto\findwindows.py", line 84, in find_element
elements = find_elements(**kwargs)
^^^^^^^^^^^^^^^^^^^^^^^
File "F:\python\Lib\site-packages\pywinauto\findwindows.py", line 303, in find_elements
elements = findbestmatch.find_best_control_matches(best_match, wrapped_elems)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "F:\python\Lib\site-packages\pywinauto\findbestmatch.py", line 533, in find_best_control_matches
raise MatchError(items = name_control_map.keys(), tofind = search_text)
pywinauto.findbestmatch.MatchError: Could not find 'notepad' in 'dict_keys([])'
[Finished in 15.8s]
import time
from pywinauto import Application
# 启动记事本应用程序
app = Application().start("notepad.exe")
# 等待应用程序加载完成
time.sleep(2)
# 连接到记事本窗口
window = app["notepad"]
# 打印记事本窗口中的所有控件
window.print_control_identifiers()
根据提供的参考资料,以及对pywinauto库的了解,以下是解决使用pywinauto打印窗口控件报错的具体步骤:
确认报错信息:首先需要了解具体的报错信息是什么,这样才能更准确地判断问题所在。根据问题描述,如果报错信息中有具体的错误信息,可以提供给我,我会尽力帮您解决。
确定是否正确安装pywinauto库:确保已经正确地安装了pywinauto库。可以使用以下命令来安装pywinauto:
pip install pywinauto
如果已经安装了pywinauto,请确保版本是最新的。
```python import sys from pywinauto import Application
# 实例化Application对象 app = Application(backend='uia')
# 启动应用程序 app.start("your_application.exe")
# 重定向标准输出,将原本的标准输出信息写入自定义的空间内,以获取控件信息 stdout = sys.stdout sys.stdout = TempStdoutArea()
# 打印控件信息 app.print_control_identifiers()
# 将控件信息转移到control_identifiers,并还原标准输出 control_identifiers, sys.stdout = sys.stdout, stdout
# 解析控件信息,获取指定控件的坐标 control_coord = GetControlCoord(app) specified_control_coord = control_coord.get_coord("your_control_name") ```
其中,"your_application.exe"为您要操作的应用程序的可执行文件名,"your_control_name"为您要获取坐标的控件名称/标识符。请根据实际情况进行修改。
处理报错信息:根据控件的具体坐标信息,可以进一步分析报错的原因,并尝试解决。例如,如果报错是因为找不到指定的控件,有以下几种可能的原因和解决方法:
控件名称或标识符错误:请确认所指定的控件名称或标识符是否正确,在查找控件时要注意大小写、空格等;
请根据具体的报错信息和实际情况进行处理,如果您能提供更多的报错信息或代码示例,我也将能够更准确地帮助您解决问题。