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窗口?
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在这种情况下字符串工作正常.
这条线
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窗口并从属性中获取它的窗口类名
| 归档时间: |
|
| 查看次数: |
9758 次 |
| 最近记录: |