Таким образом, что пользователь определил find_window только позволяет выбрать на имя класса окна
То, как пользователь определил его, чтобы передать два параметра class_name
и window_name
через нетронутым, чтобы win32gui.FindWindow
(который, в свою очередь, просто вызывает функцию API Win32 FindWindow
). Так, просто сделать это:
windowmgr.find_window(None, 'My Window Name')
Но даже если это не так, вы не должны использовать его find_window
функцию; оно должно быть довольно очевидно, как назвать win32gui.FindWindow
себя:
hwnd = win32gui.FindWindow(None, 'My Window Name')
И если вы хотите хорошее объяснение FindWindow
/EnumWindows
/и др. синтаксис, вы пытались посмотреть на них документы? Там что-то не поняли?
Тем:
... имя класса окна, которое я не знаю и не смог найти, так как это просто игра работает в Java
Какая разница делает ли он, что он работает на Java? Вы можете перечислять окна и распечатывать их имена классов, независимо от того, написаны ли они на языках C++, Java, .NET, Python или что-то еще. Или используйте один из инструментов, поставляемых с Visual Studio/VS Express, или любую из бесплатных улучшенных версий, которые вы можете найти по всей сети, например MS Spy++, что позволит вам указать на окно и дать название и имя класса.
Я не хочу перечислять окна, чтобы найти его, поскольку я не уверен, как это сработает.
Просто позвоните windowmgr.find_window_wildcard(wildcard)
с регулярным выражением, и оно перечислит окна и сравнит их названия с этим регулярным выражением.
Если вы хотите, чтобы написать свой собственный код, чтобы сделать это, просто написать функцию, как это:
def my_callback(hwnd, cookie):
Теперь, когда вы это делаете:
win32gui.EnumWindows(my_callback, some_cookie)
... это будет вызывать my_callback
функция однократно за окно, с hwnd
, являющимся окном (которое вы можете передать win32gui
, например, GetWindowText
) и cookie
- это то же самое значение some_cookie
. (Если вы не знаете все, что прошло, просто пройдите None
и ничего не делайте со значением в вашей функции обратного вызова. Но вы можете видеть, как другой отвечающему использовал его, чтобы пройти регулярное выражение через)
В то же время:.
использованием find_window_wildcard
, как это написано в сценарии удалось вывести окно на передний план несколько раз , но только если окно уже открыто и работает только с перерывами.
Во-первых, вы не можете принести окно на передний план, если оно не существует. Как вы ожидаете, что это сработает?
Что касается работы с перерывами, я предполагаю, что есть много окон, которые соответствуют вашему шаблону, и программа будет просто выбирать один из них произвольно. Возможно, это не тот, который вы хотите. (Это может быть даже скрытое окно или что-то в этом роде, поэтому вы ничего не увидите.)
Во всех случаях вам не нужно использовать find_window_wildcard
; если вы знаете точное имя, используйте это. Конечно, он все еще может быть не уникальным (независимо от названия игры, вам нечего открывать сообщение электронной почты или окно «Блокнот» с тем же заголовком ... что, кстати, именно поэтому вы хотите сначала попробовать имена классов) но, по крайней мере, это скорее будет уникальным, чем какой-то неопределенный подстановочный знак.
Итак, что, если имя класса не уникально (или, что еще хуже, это один из специальных классов «число», например, # 32770 для общего диалогового окна), и ни одно из них не является именем окна?Вы можете немного сузить ситуацию, посмотрев, скажем, процесс или модуль владения (exe/dll) или родительское окно или что-то еще. Вам нужно будет просмотреть документы win32gui
и/или MSDN (см. Выше) для вероятных действий, которые вы можете попробовать, и поиграть через пробную версию и ошибку (помните также инструмент Spy), пока не найдете способ однозначного определения окна. Тогда код, который вверх.
Если вы не знаете, как получить доступ к определенному окну, вы должны перечислить окна и попытаться найти имя окна, которое вы ищете. – thkang