win32gui не может найти окно по имени, но он есть

#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, в названии были пустые места