Как получить список названий каждого открытого окна? - PullRequest
3 голосов
/ 06 апреля 2019

Как мне получить список с именем / текстом всех открытых окон?

Я пробовал pywinauto:

pywinauto.findwindows.find_windows(title_re="*") но использование * в качестве регулярного выражения вызывает ошибку

Я пробовал win32gui: Имеет

win32gui.GetWindowText(win32gui.GetForegroundWindow())

Но в его документах я не смог найти getAllWindows или что-то, что возвращает все имена / тексты открытых дескрипторов hwnd: http://timgolden.me.uk/pywin32-docs/contents.html

Ответы [ 2 ]

1 голос
/ 06 апреля 2019

Если вы хотите использовать 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" использует более новый API из UIAutomationCore.dll.

Более подробную информацию о бэкэндах в pywinauto можно найти в Руководстве по началу работы .

1 голос
/ 06 апреля 2019

Вы можете использовать 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
...
...