• ベストアンサー

自作関数内でウインドウハンドルを得る方法

ウインドウハンドルを渡さない自作関数で、自分の元のウインドウ (オーナーウインドウというものだと思います)を得る方法を教えてください。 まず簡単に取得できるのは、自分の実行ファイルのパスやスレッドIDです。 ここからハンドルを得るにはどういう関数を使えばいいですか?

  • A__
  • お礼率59% (194/328)

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

  • ベストアンサー
  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.1

EnumWindowsでトップレベルウィンドウを列挙し、GetWindowThreadProcessIdでウィンドウのプロセスIDを取得して自分のと比較。

A__
質問者

お礼

それでできました。

関連するQ&A

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

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

  • ThreadのHandleの取得方法を教えて下さい。

    VCでTerminateThreadを使用して、Threadを終了させたいと思っています。 そのときに、実行中のThreadのHandleを取得したいのですが、良い方法があれば教えてください。

  • プロセスIDからウィンドウハンドルを取得する方法

    以下の方法を調べていますが、プロセスIDからウィンドウハンドルを取得する方法がわかりませんでした。 (1)自分がCreateProcessで生成したプロセスのウィンドウハンドル (2)自分とは関係ないプロセスで、プロセスIDだけ判明しているプロセスのウィンドウハンドル ご存知の方、ご教授願います。 <環境> WindowsXP VC++6.0

  • [Haskell]handle関数がうまくいかない

    RealWorldHaskellという本を読んでいて解決できないところがあったので質問します。 Control.Exceptionには例外を扱うhandle関数というものがあります。 型シグネチャは Exception e => (e -> IO a) -> IO a -> IO a です。 1つ目の引数に例外を捉えた場合実行する関数を、2つ目の引数に例外を投げる可能性のある関数を与えます。 1つ目の引数の関数の返り値の型と2つ目の引数の型は同じでなければなりません。 次の関数はhandle関数を利用して安全にファイルサイズを取得する(つもりで作った)関数です。 getFileSize :: FilePath -> IO (Maybe Integer) getFileSize path = handle (\_ -> return Nothing ) $ bracket (openFile path ReadMode) hClose $ \h -> do size <- hFileSize h return (Just size) この関数がうまくいきません。 具体的に言えばコンパイルすると handle (\_ -> return Nothing ) の部分で Ambiguous type variable `e0' in the constraint: とエラーは吐きます。 しかし、返り値の型はNothingでMaybe Integerと合致していると思います。 なのにAmbiguousです。 なぜこうなるのかわかりません。 ちなみにControl.OldExceptionでもhandle関数が定義されていますが、ghcのバージョンが新しいせいか(7.0.2)コンパイルできません。 なのでControl.Exceptionしか使えません。 よろしくお願いします。

  • プロセスのハンドルと識別子

    エディットやボタンなどへのアクセスは、ウインドウハンドルを使ってそれらのオブジェクトにアクセスしているんだと考えられますが、 プロセスやスレッドにはハンドルと識別子の両方があるので、その違いが分かりません。 あるスレッドが動いていて、それを止める場合、そのスレッドのハンドルを使うのか識別子を使うのかが想像できるようになりたいのです。 プロセスを終わらせる関数を見つけ、その関数の引数の型を調べるのではなく、ハンドルと識別子の違いを理解して、それを想像する方法を教えてください。

  • windowsのプロセスIDやスレッドIDの使い道

    win32APIで取得したプロセスIDやスレッドIDの使い道について教えてください。 CreateProcessなどで取得したプロセスのハンドルやスレッドのハンドルはwin32APIで使う場面がありますが、プロセスIDやスレッドIDの使い道がわかりません。 どのような場面でプロセスIDやスレッドIDを使うのでしょうか?具体的にこんな事をするときに使うよなどあれば教えていただきたいです。 プロセスIDやスレッドIDを引数にとるAPI関数などがあれば教えていただきたいです。

  • 既存プロセスからプロセスのプライマリースレッドIDの取得方法

    いつもお世話になってます。 プロセスに関することで分からないことがあるため、どなたか御教授して下さい。 只今、VC++で開発を行っているのですが、CreateProcess関数を使用して開始したプロセスの情報が、引数で指定したPROCESS_INFORMATIONにプライマリースレッドのハンドルやIDが設定されるのは知っているのですが、現在動作中のプロセスからそのプロセスのプライマリースレッドのIDを取得することは可能でしょうか? 具体的には、動作中のプロセスIDを指定するとそのプロセスのプライマリースレッドに対してPostThreadMessageで任意のメッセージが送れるという仕様です。 対象のプロセスがウィンドウを持っていれば、EnumWindows関数を使用してウィンドウに対してPostMessageができるというのは分かったのですが、今回対象のプロセスがウィンドウを持たない為、上記のようにスレッドに対してメッセージを送るようになっています。 CreateProcess呼び出し時にはスレッドIDが取得できることから、プロセスID、または、プロセスハンドルからスレッドIDが取得できるのではないかなと考えられるんですが。。。。

  • VBAでウィンドウのキャプションとフルパスを取得

    ExcelVBAを用いて、以下のことをやりたいと考えています。 (1)全ウィンドウのハンドルを取得する。 (2)取得したハンドルを、可視ウィンドウのハンドルのみに絞り込む (3)ハンドルから、ウィンドウのキャプション、ファイル名を含むフルパスの2つを抽出する。 (4)Excelのセルへ 「キャプション フルパス ハンドル」 の順に横に並ぶように出力する。 (5)Excelの行を下へ移動する。 (6)(3)~(6)を、全ての可視ウィンドウに対して順に行う。 結果としては 1つめのキャプション 1つめのフルパス 1つめのハンドル 2つめのキャプション 2つめのフルパス 2つめのハンドル 3つめのキャプション 3つめのフルパス …… と結果出力を行いたいと考えています。 まず、他の質問サイトなどの過去暦も含めて探ってみました。 その結果、全可視ウィンドウのキャプションを取得する方法とアクティブウィンドウのフルパスを取得する方法がそれぞれ見つかったのですが、自分なりに組み合わせても上手く動作しませんでした。 なんとか、解決方法を教えていただければと思います。

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

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

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

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

専門家に質問してみよう