• ベストアンサー

C# ウィンドウハンドルの取得

取得したいウィンドウハンドルをAとします。 UI Spyで調べたところ、IdentificationのClassNameがAと同じものが複数ありました。 このような場合はどのようにしてAのウィンドウハンドルを求めればよいのでしょうか。

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

  • ベストアンサー
回答No.1

API の GetWindow を使用すると良いと思います。 http://msdn.microsoft.com/ja-jp/library/cc364757.aspx ウィンドウの親子関係や兄弟関係を見るなら UI Spy よりも Spy++ の方が見やすいと思います。 http://www.atmarkit.co.jp/fdotnet/dotnettips/605managedspy/managedspy.html Spy++ は Windows SDK に入っているらしいです。 http://social.msdn.microsoft.com/forums/ja-JP/vcexpressja/thread/bbf83e96-def0-4445-8b08-681f246819da/

nodasdd
質問者

お礼

ありがとうございます。 出来ました。

その他の回答 (1)

  • todo36
  • ベストアンサー率58% (728/1234)
回答No.2

コントロールIDによる検索 GetDlgItem # Spy++などでコントロールIDを調べおく。

関連するQ&A

  • C++ 子ウィンドウのハンドルを取得したいのですが

    C++で別ウィンドウのアプリケーションを動かすというものを作っているのですが、そのウィンドウの子ウィンドウのハンドルを取得するのに困ったことがあるのでアドバイスをいただけると大変ありがたいです。 基本的にSPY++というソフトを使ってウィンドウ名その他を探し、FindWindowExまたはGetDlgItem関数を使って取得という方法をとっているのですが、クラス名、ウィンドウ名が全く同じもので、コントロールIDも0という状態のものがあり、片方を取得したい場合どうしたらよいのかという状態です。 知人にSPY++でみて上から何番目にあるやつと指定して得ることができる方法があるかもしれないと聞いたのですが、よくわかりません。 例としてその画像ものせますので、良い知恵がありましたらお貸しください。

  • ウィンドウのハンドルからファイル名を取得について

    ウィンドウのハンドルからファイル名を取得する方法について質問です。 GetWindowThreadProcessIdで、スレッドのIDを取得、 OpenProcessで、ハンドルを開く、 EnumProcessModulesで、モジュールのハンドルを取得、 GetModuleFileNameExで、パス名を取得、 でファイル名を取得しようとしているのですが一部のウィンドウのハンドルは失敗します。 Windows XPでは取得できるのですが、Windows 7では失敗します。 EnumProcessModulesで取得が失敗しているようです。 私の予想ではOpenProcessでのアクセス権の指定に問題があるのではと 思って調べてみたのですが分かりませんでした。 GetWindowModuleFileNameでも試してみたのですが、 取得に失敗します。 ちなみに、OpenProcessのアクセスフラグは 「PROCESS_QUERY_INFORMATION | PROCESS_VM_READ」です。 どうすればいいのでしょうか? 他の方法があれば、それでも構いません。 とにかく、他のウィンドウ(プロセス)のファイル名を取得出来れば、 どんな方法でも構いません。 よろしくお願いします。

  • ウィンドウハンドルの取得方法

    ダイアログの表示されないEXEを起動させて、FindWindowを使用してそのEXEのウィンドウハンドルを取得したいのですが上手くいきません・・。 FindWindowの第一引数は「ウィンドウのクラス名」を指定するようなのですが、「ウィンドウのクラス名」の意味が良くわかりません。第二引数は「ウィンドウ名」を指定するようなのですが、今回のようなアンダーグラウンドで動くEXEには「ウィンドウ名」は無いと思ってよいのでしょうか? ちなみにダイアログのあるEXEならウィンドウハンドルを取得できます。 お分かりの方がいらっしゃれば、ご教授願います。

  • 別ウインドウのハンドル取得の方法

    SDKで親ウィンドウを作ると同時に、OpenCVというコンピュータービジョンのライブラリを用いて、別のウィンドウを作りそこにある画像を表示させました。 このライブラリの関数を用いて作ったウィンドウの画像について、マウスの座標位置を取得したいのですが、この場合ウィンドウハンドルはどのように取得したらよいのでしょうか。

  • FinderSystem等のツールで取得できないハンドルを取得するには?

    他のアプリケーションのボタンで操作したいと思い FinderSystemやNuke++等のツールを使いウィンドウハンドルを調べ SendMessage関数を使ってコマンドボタンのクリックをする所までは できるのですが、ツール等でウィンドウハンドルを取得できないラベル トグルボタンが存在し、画面上では明らかに存在しているのですが そのボタンには反応せず、大きな枠組みでウィンドウハンドルを 取得してしまいます。FindWindow、FindWindowEx、GetWindow EnumChildWindowで子ウィンドウのハンドルまで調べたのですが 値が0になってしまいます。他にもボタンだけではなく タブコントロールも操作したいと思っているのですが 同様に子ウィンドウハンドルの値は0になってしまいます そもそもウィンドウハンドルを全て取得することは不可能なのでしょうか? いろいろな他のアプリケーションのコマンドボタンをFinderSystemで調べて 取得できる場合とできない場合があり、この差は何なのか 疑問に思っています。ご存知のお方がいれば お手数ですが教えていただけないでしょうか? 開発環境は、WindowsXP、VB6.0です。 宜しくお願いいたします。

  • リモートデスクトップの中のウィンドウのハンドル取得

    EnumWinProcとEnumChildProcを使って、デスックトップ上のすべてのウィンドウのハンドルを取得していますが、リモートデスクトップの中のウィンドウのハンドルは取得できないようです。 どういうFunctionを使用するとできますでしょうか? よろしくお願いします。

  • ShellExecuteでopenしたウィンドウのハンドルを取得

    こんにちは ShellExecuteでopenしたウィンドウのハンドルを取得して、MoveWindowでサイズや位置を変更したいのですが、どうしてもハンドルが取れません。 どのような記述をすればよろしいか、ご存知の方はいらっしゃいませんでしょうか 宜しくお願い致します。

  • .net frameworkで作られたフォームのウィンドウハンドルとインスタンスハンドルの取得方法

    このたびC++で.net frameworkを使い、アプリケーションを製作しているのですが、フォームのウィンドウハンドルと、アプリケーションのインスタンスハンドルの取得方法が分からなくて困っています。取得する方法はあるのでしょうか? 回答をお待ちしています。どなたかおねがいしますm(_ _)m

  • ウインドウハンドルのつかみ方について質問です。

    visualbasic6.0で開発をしています。 例えば、同親内の子コントロールに同じ「edit」クラスが2つ存在していたとします。 私は、ハンドルを掴むのにクラス名とキャプション名で掴んでいます。 しかし、クラス名は一緒で、キャプション名は存在しません。 すると、2つのコントロールを区別することができません。 現在は、FindWindowExで取得したハンドルを、アプリケーション「spy」等であっているか確認しています。 上記のような、クラス名とキャプションで判断できないものは、皆さんどのようにハンドルを取得していますか? 自分のように順次取得して、順番で判断していますか? だとしたら、FindWindowExで取得した順番はOS環境や、取得する時々で変わったりしないモノなのでしょうか? よろしくお願いします。

  • Wordでウィンドウハンドル(Hwnd)を取得したい

    Word2007、2002を使用しています。 Wordでウィンドウハンドル(Hwnd)を取得したいと思ったのですが、 どのように取得して良いかわかりませんでした。 Excelであれば以下のように取得できました。  Excel.Application.Hwnd どのようなプログラムを書けばHwndは取得できますでしょうか? 私なりに調べてみたのですが、うまく見付けられませんでした。 もしご存知でしたら、ご教示お願いいたします。

専門家に質問してみよう