#python #python-3.x #winapi #pywin32
#python #python-3.x #winapi #pywin32
Вопрос:
Я пытаюсь получить все окна, которые у меня есть, из этого кода:
def winEnumHandler( hwnd, ctx ):
if win32gui.IsWindowVisible( hwnd ):
print (hex(hwnd), win32gui.GetWindowText( hwnd ))
win32gui.EnumWindows( winEnumHandler, None )
И я получаю этот результат:
0x202e8 amd dvr overlay
0x1009a
0x6707c6 C:Windowssystem32cmd.exe - python bot.py
0x40416 api.py - pybot - Visual Studio Code
0x2204ac RАGЕ Multiplауer
0x10194
0x101b4
0x20136 Program Manager
Затем я пытаюсь получить в своих окнах название «RAGE Multiplayer»
import win32gui
print(win32gui.FindWindow(None, "RAGE Multiplayer"))
Но он всегда возвращает 0, почему? Я попытался получить другое окно с другим именем, и оно сработало, но только это имя Windows не может его разобрать, что я могу сделать, чтобы это исправить?
Комментарии:
1. Узнайте, каков реальный заголовок окна. Unicode является диким, и то, что вы видите, не обязательно совпадает с тем, что видит компьютер. Кроме того, использование класса window обычно более надежно. Однако имейте в виду: мошенничество гораздо сложнее, чем вы думаете.
2. @IInspectable, как я могу получить настоящий заголовок Windows?
3. Обязательно вызовите версию Unicode
GetWindowText
и проверьте исходные двоичные данные, которые вы получите обратно.4. Попробуйте напечатать,
print("{:} - [{:}] - {:}".format(hex(hwnd), win32gui.GetWindowText(hwnd), hex(win32gui.GetWindowLong(hwnd, win32con.GWL_EXSTYLE))))
чтобы получить точное имя и тип.5. @CristiFati, это очень помогло: 3, в названии были пустые места