WindowsXP VC++2005 Win32API です。
検索窓やNotepadといった文字を入力することができる部分をマウスで
クリックしたら自作のウィンドを表示するようなものを作りたいのです
が文字入力部分の検出方法がわかりません。
サイトで調べているとGetForegroundWindow,AttachThreadInput,GetFocusを組
み合わせるなどかかれていたのですが使い方がいまいちわからず困っていす。
またこれでできるのかわかりません。
初心者なのでわけわからない質問をしていたらすいません;;
アドバイス宜しくお願いします。
次のサイトを参考にして下さい。
http://homepage2.nifty.com/DSS/VCPP/OTHER/OtherFocusWindow.htm
お返事ありがとうございます。
参考サイトのコードを入れてみたのですが、どこをクリックしても
ハンドルをとってくるためテキストボックス等の入力部だけを取り
だすことができません。。。。
Imm32.LibのImmGetContext()やImmSetOpenStatus()なども試して
みたのですがやはり検出できません。。。
> ハンドルをとってくるためテキストボックス等の入力部だけを取り
ウインドウのハンドルさえ分かれば GetWindowClass でクラス名を
取得してクラス名が ComboBox、Edit なら入力できる領域と判定するのは。
GetGUIThreadInfo(), GUITHREADINFO.hwndFocus, GUITHREADINFO.hwndCaret
WM_GETDLGCODE, DLGC_HASSETSEL, DLGC_WANTCHARS
あたりでどうでしょうか
お返事ありがとうございます。
>取得してクラス名が ComboBox、Edit なら入力できる領域と判定するのは。
クライアント領域外のもの(検索窓など)はクラス名が不明なので処理できません。それとも実はクラス名があるのでしょうか。
> クライアント領域外のもの(検索窓など)はクラス名が不明なので処理できません。それとも実はクラス名があるのでしょうか。
クライアント領域外でもエディットボックスならクラス名が "Edit"、コンボボックスならクラス名が "ComboBox" だと思うよ。
Spy++ で見てみればよいかと。
>クライアント領域外でもエディットボックスならクラス名が "Edit"、コンボボックスならクラス名が "ComboBox" だと思うよ。andSpy++ で見てみればよいかと。
ほんとですね!!調べるとそのとおりでした。
これでできると意気込んでビルドするとGetWindowClassの識別子が見つかりません;;
windows.hでは使えないのでしょうか。参考サイト見当たりません;;
GetClassName()でクラス名を取得できますが、Editのクラス名は
DelphiとBCBでは"TEdit"
VB6では"ThunderRT6TextBox"
になっていたりします
お返事ありがとうございます。返事遅くなり申し訳ありません。
GetClassNameでクラス名を取得して識別することができました。
Notepadやoutlookなどは識別できるようになりました!!
しかし、webブラウザの検索窓を検出することができません;;
ツイート | ![]() |