使用PyWinAuto返回所有桌面窗口

3

我正在尝试使用PyAutoWin从我的计算机返回所有窗口。最终目标是通过多种方法缩小此列表以自动化(调整大小和执行抓取操作)一部分窗口。

然而,我在最基本的任务上失败了:无法返回所有窗口。我的代码如下:

import pywinauto

print(pywinauto.findwindows.enum_windows())

并且出现了以下错误:

Traceback (most recent call last):
  File "app.py", line 4, in <module>
    print(pywinauto.findwindows.enum_windows())
  File "C:\Users\*\.virtualenvs\scraper-j58Iv-wO\lib\site-packages\pywinauto\findwindows.py", line 368, in enum_windows
    win32functions.EnumWindows(proc, 0)
ctypes.ArgumentError: argument 1: <class 'TypeError'>: expected WinFunctionType instance instead of WinFunctionType

我尝试实例化了一个Desktop()对象并将其传递给enum_windows()方法,但是它不接受参数。

非常感谢任何帮助!

最好的问候


这看起来让我有点疯狂:应该是 WinFunctionType 实例,而不是 WinFunctionType。但无论如何,我们不建议使用低级别的功能。强烈建议先学习入门指南中的核心概念,然后再深入了解一些高级指南。 - Vasily Ryabov
Vasily,非常感谢您的回复。由于该指南主要是针对与单个应用程序交互而编写的,因此我发现很难从那里开始,而我需要首先识别窗口,然后才能启动自动化过程。尽管如此,还是非常感谢,今晚我会再仔细阅读一遍。 - fisheatshark
1个回答

8

正确的方法是:

from pywinauto import Desktop
top_windows = Desktop(backend="uia").windows() # or backend="win32" by default

# walk the returned list of wrappers
for w in top_windows:
    print(w.window_text())

再次感谢,这正是我想要的。现在进入我的下一个挑战,找到每个活动窗口的大小和坐标 :-) - fisheatshark
3
w.rectangle() - Vasily Ryabov
我刚遇到了与 OP 相同的问题,但我并不真正对你的解决方案感兴趣,因为我正在尝试弄清楚 pywinauto 的所有功能。为什么 OP 的代码行不起作用,它是什么意思?在文档中,它说“返回所有顶级窗口的句柄列表”,但显然它并没有这样做。pywinauto 是垃圾吗?我应该尝试找到另一个模块吗? - user3548298
1
如果您是pywinauto的新手,建议从入门指南开始学习。OP正在使用不推荐的非常低级别的API。我的意思是findwindows.enum_windows():它确实返回句柄列表。但是ApplicationDesktop对象的.windows()方法返回高级别包装器的列表。 - Vasily Ryabov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接