win32gui.FindWindow找不到窗口

SiH*_*iHa 2 python windows winapi pywin32 teraterm

我正在尝试使用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)
Run Code Online (Sandbox Code Playgroud)

但是:
hwndMain = win32gui.FindWindow("Tera Term VT", None)返回0,它找不到窗口.

如果我换"Tera Term VT""Notepad",我很乐意整天将键击发送到活动的记事本窗口.那么,为什么我不能进入TeraTerm窗口?

根据ActiveState文档:

PyHANDLE = FindWindow(ClassName,WindowName)

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)
Run Code Online (Sandbox Code Playgroud)

工作得很好,但把窗口带到前台,我不喜欢.但是Tera Term VT在这种情况下字符串工作正常.

DAX*_*lic 6

这条线

shell.AppActivate("Tera Term VT")
Run Code Online (Sandbox Code Playgroud)

适用于窗口标题,因此它的工作原理.
你应该能够与之相同

hwndMain = win32gui.FindWindow(None, "Tera Term VT")  
Run Code Online (Sandbox Code Playgroud)

也就是说,交换参数,以便它也可以根据窗口标题工作

如果你想基于窗口类名工作,你可以使用像Spy ++这样的工具及其Finder工具来定位Tera Term窗口并从属性中获取它的窗口类名