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"
と、アクティブなメモ帳ウィンドウに 1 日中喜んでキーストロークを送信できます。では、TeraTerm のウィンドウが表示されないのはなぜですか?
ActiveStateのドキュメントによると:
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
場合、文字列は正常に機能します。