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

Posted

技术标签:

【中文标题】如何获取每个打开窗口的名称列表?【英文标题】: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

【问题讨论】:

看看 EnumWindows 【参考方案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.EnumWindowsbackend="uia" 使用来自 UIAutomationCore.dll 的更新 API。

有关 pywinauto 中后端的更多详细信息,请参阅Getting Started Guide。

【讨论】:

【参考方案3】:

你也可以使用 pyautogui, 作者:

import pyautogui

for x in pyautogui.getAllWindows():  
    print(x.title)

【讨论】:

以上是关于如何获取每个打开窗口的名称列表?的主要内容,如果未能解决你的问题,请参考以下文章

如何获取具有可见窗口的任何进程的名称 - WinAPI?

C#如何通过进程名称获取指定窗口的句柄,通过该句柄获取该窗口的标题?

如何获取任务管理器中显示的活动窗口应用程序名称

如何从 chrome 获取打开的标签列表? | C#

如何获取指定的文件夹内文件的全部名称?

如何从打开的窗口列表中检索 QWidget