win32gui.FindWindow 找不到 window
win32gui.FindWindow Not finding window
我正在尝试使用 Pywin32 将击键发送到不活动的 TeraTerm Window。
This 回答让我写了这段代码:
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)
returns 0
,找不到 window。
如果我将 "Tera Term VT"
更改为 "Notepad"
,我可以整天愉快地将击键发送到活动的记事本 window。那么,为什么我无法获得 TeraTerm window?
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
那么我怎样才能得到正确的类名来使用呢?
我几乎尝试了 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)
工作得很好,但将 window 带到了前台,这是我不希望的。 Tera Term VT
字符串在这种情况下工作正常。
行
shell.AppActivate("Tera Term VT")
适用于 window 标题,因此它有效。
您应该可以使用
hwndMain = win32gui.FindWindow(None, "Tera Term VT")
也就是说,交换参数以便它也可以基于 window 标题
如果您想基于 window class 名称工作,您可以使用像 Spy++ 这样的工具及其 Finder Tool 来定位 Tera Term window 并获得它的 window class 名称来自属性
我正在尝试使用 Pywin32 将击键发送到不活动的 TeraTerm Window。
This 回答让我写了这段代码:
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)
returns 0
,找不到 window。
如果我将 "Tera Term VT"
更改为 "Notepad"
,我可以整天愉快地将击键发送到活动的记事本 window。那么,为什么我无法获得 TeraTerm window?
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
那么我怎样才能得到正确的类名来使用呢?
我几乎尝试了 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)
工作得很好,但将 window 带到了前台,这是我不希望的。 Tera Term VT
字符串在这种情况下工作正常。
行
shell.AppActivate("Tera Term VT")
适用于 window 标题,因此它有效。
您应该可以使用
hwndMain = win32gui.FindWindow(None, "Tera Term VT")
也就是说,交换参数以便它也可以基于 window 标题
如果您想基于 window class 名称工作,您可以使用像 Spy++ 这样的工具及其 Finder Tool 来定位 Tera Term window 并获得它的 window class 名称来自属性