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

use*_*242 14 python win32gui pywinauto

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

我试过pywinauto:

pywinauto.findwindows.find_windows(title_re="*")*用作正则表达式会引发错误

我试过 win32gui:它有

win32gui.GetWindowText(win32gui.GetForegroundWindow())

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

Ped*_*ito 23

您可以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 )
Run Code Online (Sandbox Code Playgroud)

输出:

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
...
Run Code Online (Sandbox Code Playgroud)


小智 11

您还可以通过以下方式使用 pyautogui:

import pyautogui

for x in pyautogui.getAllWindows():  
    print(x.title)
Run Code Online (Sandbox Code Playgroud)


Vas*_*bov 10

如果你想使用 pywinauto,那就简单多了:

from pywinauto import Desktop

windows = Desktop(backend="uia").windows()
print([w.window_text() for w in windows])
Run Code Online (Sandbox Code Playgroud)

这甚至适用于 WPF 应用程序。使用win32gui.EnumWindows无法访问 WPF 或 UWP 应用程序的文本。pywinautowin32gui.EnumWindowsDesktop(backend="win32"). backend="uia"使用来自UIAutomationCore.dll.

有关 pywinauto 中后端的更多详细信息,请参阅入门指南