【Python】GetWindowTextで取得できない文字列を取得する方法(win32api SendMessage WM_GETTEXT)
GetWindowTextで文字列が取得できない場合(他プロセスのコントロール文字列は取得できないらしい、意味不明)は
指定のハンドルにメッセージを投げて文字列を取得する。
投げるメッセージの定数はwinuser32.h内に記載されている。
ハンドルはspy++等で調べることが可能,16進数の整数。
SendMessageは末尾に"A"(ANSI版)と"W"(unicode版)どちらかが選択できるが
日本語で帰ってくる可能性があるはずなので"W"にしてみている。今のところ問題はなし。
import ctypes def get_control_text(): # ハンドル hwnd = 0x0001096C # 定数はwinuser.hに定義されている msg_gettextlength = 0x000E msg_gettext = 0x000D # 受け取るテキストの文字長さを取得(wParam,lParamは0にすること) 終端文字列は含まず len_str = ctypes.windll.user32.SendMessageW(hwnd, msg_gettextlength, 0, 0 ) # 文字列バッファを定義 buff = ctypes.create_unicode_buffer(len_str + 1) # 文字列を取得 第3引数にwParamに文字数,第4引数にlParamに文字列バッファ ctypes.windll.user32.SendMessageW(hwnd, msg_gettext, len_str +1, buff )