文字入力フォームにフォーカスがあることを検出するには?


たく  2007-12-03 17:36:05  No: 67090  IP: 192.*.*.*

WindowsXP VC++2005 Win32API です。

検索窓やNotepadといった文字を入力することができる部分をマウスで

クリックしたら自作のウィンドを表示するようなものを作りたいのです

が文字入力部分の検出方法がわかりません。

サイトで調べているとGetForegroundWindow,AttachThreadInput,GetFocusを組

み合わせるなどかかれていたのですが使い方がいまいちわからず困っていす。

またこれでできるのかわかりません。

初心者なのでわけわからない質問をしていたらすいません;;

アドバイス宜しくお願いします。

編集 削除
夏みかん  2007-12-03 21:55:06  No: 67091  IP: 192.*.*.*

次のサイトを参考にして下さい。
http://homepage2.nifty.com/DSS/VCPP/OTHER/OtherFocusWindow.htm

編集 削除
たく  2007-12-05 00:25:33  No: 67092  IP: 192.*.*.*

お返事ありがとうございます。

参考サイトのコードを入れてみたのですが、どこをクリックしても

ハンドルをとってくるためテキストボックス等の入力部だけを取り

だすことができません。。。。

Imm32.LibのImmGetContext()やImmSetOpenStatus()なども試して

みたのですがやはり検出できません。。。

編集 削除
夏みかん  2007-12-06 13:14:56  No: 67093  IP: 192.*.*.*

> ハンドルをとってくるためテキストボックス等の入力部だけを取り
ウインドウのハンドルさえ分かれば GetWindowClass でクラス名を
取得してクラス名が ComboBox、Edit なら入力できる領域と判定するのは。

編集 削除
n  2007-12-06 14:49:25  No: 67094  IP: 192.*.*.*

GetGUIThreadInfo(), GUITHREADINFO.hwndFocus, GUITHREADINFO.hwndCaret
WM_GETDLGCODE, DLGC_HASSETSEL, DLGC_WANTCHARS
あたりでどうでしょうか

編集 削除
たく  2007-12-06 19:53:01  No: 67095  IP: 192.*.*.*

お返事ありがとうございます。

>取得してクラス名が ComboBox、Edit なら入力できる領域と判定するのは。
クライアント領域外のもの(検索窓など)はクラス名が不明なので処理できません。それとも実はクラス名があるのでしょうか。

編集 削除
夏みかん  2007-12-06 21:13:39  No: 67096  IP: 192.*.*.*

> クライアント領域外のもの(検索窓など)はクラス名が不明なので処理できません。それとも実はクラス名があるのでしょうか。
クライアント領域外でもエディットボックスならクラス名が "Edit"、コンボボックスならクラス名が "ComboBox" だと思うよ。

編集 削除
RAPT  2007-12-07 00:17:29  No: 67097  IP: 192.*.*.*

Spy++ で見てみればよいかと。

編集 削除
たく  2007-12-07 18:04:48  No: 67098  IP: 192.*.*.*

>クライアント領域外でもエディットボックスならクラス名が "Edit"、コンボボックスならクラス名が "ComboBox" だと思うよ。andSpy++ で見てみればよいかと。

ほんとですね!!調べるとそのとおりでした。
これでできると意気込んでビルドするとGetWindowClassの識別子が見つかりません;;
windows.hでは使えないのでしょうか。参考サイト見当たりません;;

編集 削除
n  2007-12-08 11:46:12  No: 67099  IP: 192.*.*.*

GetClassName()でクラス名を取得できますが、Editのクラス名は
DelphiとBCBでは"TEdit"
VB6では"ThunderRT6TextBox"
になっていたりします

編集 削除
たく  2007-12-09 16:55:25  No: 67100  IP: 192.*.*.*

お返事ありがとうございます。返事遅くなり申し訳ありません。

GetClassNameでクラス名を取得して識別することができました。
Notepadやoutlookなどは識別できるようになりました!!
しかし、webブラウザの検索窓を検出することができません;;

編集 削除