Я пытаюсь отправить нажатие клавиши в неактивное окно TeraTerm, используя Pywin32.
Этот ответ заставил меня написать этот код:
import win32gui
import win32con
import win32api
hwndMain = win32gui.FindWindow("Tera Term VT", None)
print hwndMain
hwndChild = win32gui.GetWindow(hwndMain, win32con.GW_CHILD)
win32api.PostMessage(hwndChild, win32con.WM_CHAR, 0x5b, 0)
но:hwndMain = win32gui.FindWindow("Tera Term VT", None)
возвращает 0
, окно не может быть найдено.
Если я изменю "Tera Term VT"
на "Notepad"
, я могу с радостью отправлять нажатия клавиш в активное окно Блокнота в течение всего дня. Итак, почему я не могу получить окно TeraTerm?
Согласно документации ActiveState:
PyHANDLE = FindWindow (имя класса, имя окна)
ClassName : PyResourceId Имя или атом класса окна, который нужно найти, может быть None
WindowName : строка Заголовок окна, которое нужно найти, может быть None
Итак, как я могу использовать правильное имя класса?
Я пробовал почти все варианты Tera Term VT
, избегая пробелов: "Tera\ Term\ VT"
, заключая все в одинарные кавычки: "'Tera Term VT'"
, но ничего не работает. Я даже пытался использовать имя процесса: "ttermpro.exe"
и в отчаянии включил дочернее имя в строку "COM11:115200baud - Tera Term VT"
, но ничего не работает.
Интересно, это:
import win32com.client
shell = win32com.client.Dispatch("WScript.Shell")
shell.AppActivate("Tera Term VT")
shell.SendKeys("\%i", 0)
работает просто отлично, но выводит окно на передний план, чего я не хочу. Однако в этом случае строка Tera Term VT
работает нормально.