I'm trying to send a keystroke to an inactive TeraTerm Window using Pywin32.
This answer led me to write this code:
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)
but:
hwndMain = win32gui.FindWindow("Tera Term VT", None)
returns 0
, it can't find the window.
If I change "Tera Term VT"
to "Notepad"
, I can happily send keystrokes to an active Notepad window all day long. So, why can't I get the TeraTerm window?
According to the ActiveState documentation:
PyHANDLE = FindWindow(ClassName, WindowName)
ClassName : PyResourceId Name or atom of window class to find, can be None
WindowName : string Title of window to find, can be None
So how can I get the correct ClassName to use?
I've tried just about every variation of Tera Term VT
, escaping the spaces: "Tera\ Term\ VT"
, enclosing the whole in single quotes: "'Tera Term VT'"
, but nothing works. I've even tried using the name of the process:"ttermpro.exe"
, and included the child name in the string "COM11:115200baud - Tera Term VT"
in my desperation, but nothing works.
Interestingly, this:
import win32com.client
shell = win32com.client.Dispatch("WScript.Shell")
shell.AppActivate("Tera Term VT")
shell.SendKeys("\%i", 0)
works just fine, but brings the window to the foreground, which I don't wan't. The Tera Term VT
string works fine in this instance though.