我正在尝试使用 Pywin32 向非活动 TeraTerm 窗口发送击键。
这个答案让我写了这段代码:
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 窗口?
PyHANDLE = FindWindow(类名,窗口名)
ClassName : PyResourceId 要查找的窗口类的名称或原子,可以是 None
WindowName : string 要查找的窗口的标题,可以是 None
那么我怎样才能得到正确的 ClassName 来使用呢?
我已经尝试了几乎所有变体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
字符串可以正常工作。