【问题标题】:How to get a list of the name of every open window?如何获取每个打开窗口的名称列表?
【发布时间】:2019-04-06 09:59:51
【问题描述】:
如何获取所有打开的窗口的名称/文本列表?
我试过pywinauto:
pywinauto.findwindows.find_windows(title_re="*")
但是使用* 作为正则表达式会引发错误
我试过win32gui:
它有
win32gui.GetWindowText(win32gui.GetForegroundWindow())
但在其文档中,我找不到 getAllWindows 或返回打开 hwnd 句柄的所有名称/文本的东西:
http://timgolden.me.uk/pywin32-docs/contents.html
【问题讨论】:
标签:
python
win32gui
pywinauto
【解决方案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
...
【解决方案2】:
如果你想使用 pywinauto,那就简单多了:
from pywinauto import Desktop
windows = Desktop(backend="uia").windows()
print([w.window_text() for w in windows])
这应该适用于 WPF 应用程序。使用 win32gui.EnumWindows 无法访问 WPF 或 UWP 应用程序的文本。 pywinauto 在Desktop(backend="win32") 中使用win32gui.EnumWindows。 backend="uia" 使用来自 UIAutomationCore.dll 的更新 API。
有关 pywinauto 中后端的更多详细信息,请参阅Getting Started Guide。
【解决方案3】:
你也可以使用 pyautogui,
作者:
import pyautogui
for x in pyautogui.getAllWindows():
print(x.title)