2016-08-16 8 views
1

Pywin32を使用して、非アクティブなTeraTermウィンドウにキーストロークを送信しようとしています。win32gui.FindWindowウィンドウが見つかりません

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)戻り0、それはウィンドウを見つけることができません。

"Tera Term VT""Notepad"に変更すると、いつもメモ帳のウィンドウに1日中キーストロークを送信できます。だから、なぜ私はTeraTermウィンドウを取得できませんか?

ActiveState documentationによると:

PyHANDLE = FindWindowを(クラス名、WindowName)

のClassName:PyResourceId 名前または見つけるウィンドウクラスの原子、することができなし
WindowName:文字列 タイトル見つけることができるウィンドウはありません。なし

どのように私に正しいClassNameを取得できますか? e?

私は、スペースをエスケープ、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) 

はうまく動作しますが、私はwan'tていない最前面にウィンドウをもたらします。しかし、この例ではTera Term VT文字列が正常に機能します。

答えて

3

ライン

shell.AppActivate("Tera Term VT") 

ウィンドウのタイトル上で動作し、したがって、それが動作します。
あなたはウィンドウクラス名に基づいて、あなたの仕事をしたい場合は、それはまた、ウィンドウのタイトル

に基づいて動作するように引数を交換し、あること

hwndMain = win32gui.FindWindow(None, "Tera Term VT") 

と同じにすることができるはずですTera Termウィンドウをターゲットにしてウィンドウクラス名をプロパティから取得するには、Finder ToolというSpy ++のようなツールを使用することができます。

+0

私はFinder Toolを調べます。しかし、。ありがとう。 – SiHa

+0

それからタイトルは "Tera Term VT"と正確には一致しませんでした。おそらくあなたはそのウィンドウのスクリーンショットを提供することができます。それにもかかわらず、アプリケーションはいつでもタイトルを変更する可能性があるため、ウィンドウクラス名に基づいたソリューションが優れています。 – DAXaholic

+0

ありがとう、私は今日何かを学んだ。ウィンドウクラスは私にとって初めてのものです! [WinSpy ++](http://www.pendriveapps.com/winspy-find-window-properties/)をダウンロードし、クラスが実際には 'VTWin32'であることを発見しました。これは完全に動作します。 – SiHa

関連する問題