如何获取每个打开的窗口的名称列表?

时间:2019-04-06 09:59:52

标签: python win32gui pywinauto

如何获取所有打开的窗口的名称/文本列表?

我尝试了pywinauto:

<img src="img1.jpg" class="img1"> <img src="img2.jpg" class="img2"> 但是使用pywinauto.findwindows.find_windows(title_re="*")作为正则表达式会引起错误

我尝试了win32gui: 它有

*

但是在其文档中,我找不到getAllWindows或返回打开的hwnd句柄的所有名称/文本的东西: http://timgolden.me.uk/pywin32-docs/contents.html

2 个答案:

答案 0 :(得分:1)

您可以将win32gui.GetWindowText( hwnd )win32gui.EnumWindows一起使用:

import win32gui

def winEnumHandler( hwnd, ctx ):
    if win32gui.IsWindowVisible( hwnd ):
        print (hex(hwnd), win32gui.GetWindowText( hwnd ))

win32gui.EnumWindows( winEnumHandler, None )

输出:

0x20fa4 bet - [C:\Users\X\Desktop\] - [bet] - L:\stack\stack_enum_windows.py - IntelliJ IDEA 2017.2.5
0x1932478 13. vnc 888
0x30c27b8 Telegram (55)
0x40aba MobaXterm
0x10a0a IntelliJIDEALicenseServer_windows_amd64.exe - Shortcut
...

答案 1 :(得分:1)

如果您想使用pywinauto,则更加简单:

from pywinauto import Desktop

windows = Desktop(backend="uia").windows()
print([w.window_text() for w in windows])

这对于WPF应用程序也应该起作用。使用win32gui.EnumWindows无法访问WPF或UWP应用程序的文本。 pywinauto在win32gui.EnumWindows内使用Desktop(backend="win32")backend="uia"使用来自UIAutomationCore.dll的较新API。

有关pywinauto中后端的更多详细信息,可以在Getting Started Guide中找到。