• ベストアンサー

他アプリのアクティブな子ウインドウを取得するには?

他人の作ったあるフリーソフトがあるのですが、そのソフトには、テキストボックスが2つ存在していて、そのうち、現在キー入力を受け付ける状態にある方のテキストボックスのハンドルを取得したいと思っています。 つまり、アクティブな子ウインドウを取得したいということなのですが、そのようなことは可能でしょうか? 自作ソフトならばなんとか分かるのですが、他人の作ったものでは無理なのでしょうか? APIのGetForegroundWindowでは、トップレベルウインドウしか求めることが出来ないようですし。 よろしくお願い致します。

noname#208339
noname#208339

質問者が選んだベストアンサー

  • ベストアンサー
  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.3

★アドバイス ・AttachThreadInput関数を利用します。  次のリンクを参考にして下さい。  http://homepage2.nifty.com/DSS/PT/HTML/VCPP/OTHER/OtherFocusWindow.htm→『フォーカスのあるウィンドウ』

参考URL:
http://homepage2.nifty.com/DSS/PT/HTML/VCPP/OTHER/OtherFocusWindow.htm
noname#208339
質問者

お礼

サンプルありがとうございます。 GetGUIThreadInfo を使った方法で出来ましたが、サンプルの方法でも確認したところ見事に取得できました。 どうもありがとうございました。

その他の回答 (2)

  • lesskey
  • ベストアンサー率33% (66/200)
回答No.2

VisualStudioに付属しているSpy++とかで そのソフト上のテキストボックスのクラス名を取得して FindWindow/FindWindowExとかでウィンドウハンドルを取得。 あとは煮るなり焼くなり出来るかも・・・

noname#208339
質問者

お礼

ありがとうございます。参考にさせていただきます。

  • jx-word
  • ベストアンサー率40% (38/94)
回答No.1

GetWindowThreadProcessIdでウィンドウのスレッドIDをとって、GetGUIThreadInfoでそのスレッドのウィンドウ情報が取れるようですね。 MSDNを読んだだけなんで実際にどう動くのかは分かりませんが。

noname#208339
質問者

お礼

GetGUIThreadInfo を使うことによって、フォーカスのある子ウインドウを、見事に取得するとこができました。 どうもありがとうございました。

関連するQ&A

  • 他アプリのコントロール操作

    2つのアプリA.exeとB.exeがあります。A.exeの特定のテキストボックスに入力された内容をB.exeで監視しようとしているのですが次の2点問題があります。 説明がうまくできないのですが回答をいただければと思います。よろしくお願いします。 1.FindWindowを使ってウィンドウハンドルを取得しようとしているが,同じウィンドウ名を持つA.exe以外のウィンドウが存在するとA.exeのウィンドウかどうか判断できない? 2.ウィンドウハンドルが取得できたとして,複数のテキストボックスがある場合,それぞれのテキストボックスを区別する方法は?

  • ExcelVBAでAPIを使って外部ウインドウのエディットテキストを取得する方法

    ●やりたいこと ExcelVBAで、APIを実行し、外部ソフトのウィンドウに含まれている エディットテキストを取得して、セルに出力したい 使用する関数・宣言、できればコードを教えていただけませんでしょうか。 イメージはこちらをご参考いただけると幸いです。 ​http://situmon-img.blogspot.com/2008/08/1.html​ 変数hwindowに親ウィンドウのハンドルが取得されています。 エディットボックスのハンドル、IDは分かりません。 エディットボックスのハンドルを取得し、 分かっているクラス・ハンドルの文字列を取得 といった流れになるのではと思っております。 変数にさえ文字列が取得できれば、 当然ですが、Range("B2")=変数 で大丈夫です。 変数は、ひとつを使いまわしで構いません。 変数をエディットテキストの数だけ用意しても構いません。

  • 他アプリケーション’(ウィンドウ)のハンドル取得方法

     GetWindowTextを用いて、他ウィンドウ、他アプリケーション内のテキストボックスに表示されている、文字列を取得したいです。他アプリケーションは、自分のアプリケーションから、shell関数を用いて起動します。他ウィンドウのハンドル値は、shellの返り値でわかるのですが、テキストボックスのハンドル値が分かりません。 どなたか、 ご教授願います。 おねがいします。

  • エディタに文字を表示するためのウィンドウハンドルを取得したい

    以下のようなことをしようとしています。 ・メモ帳などのエディタが起動されている。 ・エディタは一番上のウィンドウとして存在していて、入力場所でカーソルが点滅している。 ・別プロセスからそのウィンドウにメッセージを送り、文字を表示させたい。 GetForegroundWindow()で取得したハンドルにメッセージを投げましたが何も表示されませんでした。 なので、エディタの親ウィンドウではなく、アクティブな子ウィンドウにメッセージを投げなければならないと思い、以下の処理で子ウィンドウのハンドルを取得しようと思いました。  hWndWork = GetForegroundWindow();  if(hWndWork != NULL) {   bSts = cWndWork.Attach(hWndWork);   if(bSts != 0) {    cWndTarget = cWndWork.GetActiveWindow();    if(cWndTarget != NULL) {     hWndTarget = cWndTarget->m_hWnd;    }   }  } 結果としては「hWndWork 」と「hWndTarget 」は同じでした。 考え方や、上記の処理で間違っている点などがありましたら指摘願います。 また、エディタに表示する方法をご存知であればご教授願います。

  • 他のデスクトップアプリのデータを取得したい

    VB.NET2003開発環境を持っています。 他の人が開発した、Windowsデスクトップアプリのラベル・テキストボックス・コンボボックス等のコントロール名とプロパティを取得したり、値を送る方法を調べています。 SendMessageとかAPIとかSpy++とか色々出てきたのですが、解決には至りません。 本屋などで書籍も見たんですが、欲しい機能はのっていません。 解決のヒントを頂きたいです。

  • VC++2005での他のアプリ操作について

    VC++2005でWindowsフォームアプリケーション形式でプロジェクトを作成し、他の人が作成したWindow形式のtextboxやコンボボックスなどが存在するソフトを操作したいのですが、どなたかご教示いただけないでしょうか。 環境はOS:Windos vista 開発ソフト:Microsoft Visual Studio C++ 2005 です。 つい先日、同様の質問をし、 ”基本的にはFindWindow、EnumWindowとかでアプリケーションのトップウィンドウを探して、さらにEnumChildWindow、GetDlgItemとかでテキストボックスやコンボボックスを探して操作。 ボタンを押すのは、トップウィンドウに対してSendMessage(WM_COMMAND,~);とかでできるかと思います。” と教えていただいたのですがWindowsフォームアプリケーション形式では使えないような感じなのでどうすればいいのかわかりません。 大変困っています。よろしくお願い致します。

  • ウインドウの取得

    かんたんYouTubeプレーヤーというソフトのウインドウハンドルを取得し、プレーヤーウインドウのサイズや位置を変更するプログラムをVB2008で作成しようとしました。このプレーヤーはリストウインドウとプレーヤーウインドウの二つがあるのですが、窓ちぇき!というソフトでタイトルとクラス名を調べたら二つとも同じタイトルとクラス名になっていました。これだとFindWindow関数でウインドウハンドルを取得できません。どうすればよいでしょうか。

  • 子ウィンドウの操作について(VC++)

    Windows98 Visual C++6.0 雛型でMDIを作成して、アクティブな子ウィンドウに記述されている文字列を操作したいと思っています。 ダイアログボックスを表示して、その中のボタンを押したら、アクティブな子ウィンドウから文字列を取得しある処理した結果をダイアログボックスのtextに表示したいと考えています。 今のところダイアログボックスを表示する所まで出来ています。 問題点は 1.アクティブな子ウィンドウのハンドルはどのようすれば取得できるのでしょうか? 使用すべき関数名等を教えてください。 2.アクティブな子ウィンドウに記述されているデータを取得するには、GetWindowTextやsendMessageで出来るのでしょうか?(なるべくならSJISで処理をしたいと考えているのですが。) わかりずらい質問かも知れませんが宜しくお願いします。

  • アクティブウインドウのIMEコンテキスト取得を取得したい。

    アクティブウインドウのIMEコンテキスト取得を取得したい。 以下、問題のコードです。 ---ここから 'アクティブウインドウのハンドルを取得API宣言 Private Declare Function GetActiveWindow Lib "user32" () As Long 'IMEコンテキスト取得API宣言 Private Declare Function ImmGetContext Lib "imm32.dll" _ (ByVal hWnd As Long) As Long Private Sub CommandButton1_Click() 'アクティブウインドウのハンドルを取得 Dim hWnd As Long hWnd = GetActiveWindow() 'IMEコンテキスト取得 Dim himc As Long himc = ImmGetContext(hWnd) End Sub ---ここまで 上記のコードでアクティブウインドウ(上記例の場合、エクセル)でのIMEコンテキスト取得 したいと思っています。 hWndでは、ハンドルを取得できているのですが、 himcの戻り値が0になってしまって、IMEコンテキスト取得が失敗しています。 目的は、アクティブウインドウでのIMEの入力をローマジ入力の半角英数のみにすることです。 そのため、IMEコンテキスト取得を取得したいのですが、上記方法のどこがいけないでしょうか? どうぞよろしくお願いします。 言語:VBA(Excel 2007) OS:Vista

  • 子ウィンドウでの選択を取得するjavascrip

    表題ですがわかりづらく申し訳ございません。 以下のようなコーディングを考えておりますが どなたかご教示いただければ幸いです。 項目 テキストスペース 一覧表示 ↑上記の「一覧表示」をクリックすると子ウィンドウが立ち上がる。 子ウィンドウの中にラジオボックス、 もしくはチェックボックスの入った選択キーワードが複数あり、 ひとつチェックを入れると ↑の「テキストスペース」に選択したキーワードが取得される、というコーディングです。 ※例   ブランド選択  テキストスペース ブランド一覧 ⇒ブランド一覧をクリック、子ウィンドウが立ち上がる ⇒子ウィンドウのブランド一覧の中からユニクロを選択しラジオボックスにチェックを入れる ⇒親ウィンドウ以下のように変化   ブランド選択 ユニクロ ブランド一覧 コーディング初心者ですが javascriptかjqueryで実装が出来そうな感じなのですが いい情報が見つかりません。。。 どうぞよろしくお願いします。

専門家に質問してみよう