How do I get a list of the name/text of all opened windows?
I tried pywinauto:
pywinauto.findwindows.find_windows(title_re="*")
but using *
as a regex raises an error
I tried win32gui: It has
win32gui.GetWindowText(win32gui.GetForegroundWindow())
But in its docs I couldn't find a getAllWindows or something that returns all names/texts of open hwnd handles: http://timgolden.me.uk/pywin32-docs/contents.html
You can use win32gui.GetWindowText( hwnd )
along with win32gui.EnumWindows
:
import win32gui
def winEnumHandler( hwnd, ctx ):
if win32gui.IsWindowVisible( hwnd ):
print ( hex( hwnd ), win32gui.GetWindowText( hwnd ) )
win32gui.EnumWindows( winEnumHandler, None )
Output:
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
...
If you want using pywinauto, it's much easier:
from pywinauto import Desktop
windows = Desktop(backend="uia").windows()
print([w.window_text() for w in windows])
This should work even for WPF applications. Using win32gui.EnumWindows
can't access texts for WPF or UWP applications. pywinauto uses win32gui.EnumWindows
inside Desktop(backend="win32")
. backend="uia"
uses newer API from UIAutomationCore.dll
.
More details about backends in pywinauto can be found in the Getting Started Guide.
You can also utilize pyautogui, by:
import pyautogui
for x in pyautogui.getAllWindows():
print(x.title)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With