■
DeecayさんがCraftLaunchEX and Python and Scriptsで公開してくださったSendTextのコードを参考に、手を加えてみた。変更点は、子ウインドウをGetDlgItemにIDを指定して取得するようにした事と、テキストをエンコードするようにしたことぐらい。
# -*- coding: utf_8 -*- import win32gui, win32con, struct, string def SendText(parentTitle, parentClassname, targetClassID, text): hwnd_child = 0 hwnd_parent = hwnd_parent = win32gui.FindWindow( parentClassname, parentTitle ) if hwnd_parent: hwnd_child = win32gui.GetDlgItem(hwnd_parent, targetClassID) if hwnd_child: try: text = text.encode() except: text = text.encode('japanese.shift_jis') for chr in text: win32gui.SendMessage(hwnd_child, win32con.WM_CHAR, ord(chr), 0) return hwnd_parent
いろいろなケースをテストもしてないし、動作は保証しない。エラーが出ることもあると思うが、そういうのを気にする人は自分でエラートラップなり何なりを追加して回避するようにして欲しい。WM_CHARでうまく送信できないウインドウもあると思うのでその場合は最後の二行をうまい事なんとかしてもらうしかない。
都合によりreturn文を追記。テキストを送った先をアクティブにしたい時に、いちいちFindWindowを呼び出すのはコストが高いと思ったため。