別のアプリケーションのウインドウ上のエディットボックスの内容が取得できません。
今作っているウインドウの情報を表示するプログラムで、
ほかのアプリケーションのウインドウの情報を表示しようとすると、
ウインドウ、ボタンなどはテキストを取得できるのですが、
エディットボックスのテキストは取得できません。
(ヘルプには、取得できないと書かれているので仕様だと思うのですが)
GetWindowTextを使っているのですが、
(ヘルプには、取得できないと書かれているので仕様だと思います)
他の方法はあるのでしょうか。
別のアプリケーションのウインドウテキスト
自己解決?
自己解決したかもしれません。
MSDNにこう書いてありました [ここをクリックすると内容が表示されます]
まだ試してないのでなんとも言えませんが・・・ターゲットウィンドウが現在のプロセスに所有されている場合は、ウィンドウまたはコントロールに メッセージが送られます。ターゲットウィンドウが他のプロセスに所有されており、キャプションを持つ場合は、ウィンドウのキャプションテキストがコピーされます。ウィンドウがキャプションを持たない場合は、NULL 文字列が返ります。この動作は、設計上決められたものです。これにより、アプリケーションは、ターゲットウィンドウを所有するプロセスがハングしている場合に GetWindowText 関数を呼び出してもハングせずに済みます。ただし、ターゲットウィンドウがハングしており、そのウィンドウが関数を呼び出したアプリケーションに属する場合は、GetWindowText 関数を呼び出したことによりアプリケーションもハングします。
他のプロセス内のコントロールのテキストを取得するには、GetWindowText 関数を呼び出すのではなく、直接 WM_GETTEXT メッセージを送ります。
↑これでしょうか?
(MSDNから引用)
他のプロセス内のコントロールのテキストを取得するには、GetWindowText 関数を呼び出すのではなく、直接 WM_GETTEXT メッセージを送ります。
↑これでしょうか?
(MSDNから引用)
お助けになるかどうか
こんにちは^^
初心者のkoboと申します。
以前、ここでメモ帳のテキストを拾得したいと質問をしたときに
教えて頂いたコードです。
的外れかもしれませんが、何かのお役に立てばと思います。
初心者のkoboと申します。
以前、ここでメモ帳のテキストを拾得したいと質問をしたときに
教えて頂いたコードです。
的外れかもしれませんが、何かのお役に立てばと思います。
コード: 全て選択
dim hwin as HWND,hcwin as HWND
dim text as LPSTR
dim len as Long
hwin=FindWindow("Notepad","無題 - メモ帳")
hcwin=GetWindow(hwin,GW_CHILD)
SendMessage(hwin,WM_CHAR,&h46,0) '&h41=65
len=SendMessage(hcwin,WM_GETTEXTLENGTH,0,0)+1
text=calloc(len)
SendMessage(hcwin,WM_GETTEXT,len,text)
MessageBox(0, "text =[ "+MakeStr(text)+"]", "読込", MB_OK)'出力
free(text)
end