フックとWindowキャプチャに関するメモ

| コメント(0) | トラックバック(0)

SetWindowsHookEx関数でマウスをフックし、マウスポインタが指すウィンドウのハンドルを取得するプログラムを書いた際に気がついた事のメモ。

まずWH_MOUSEではフックを開始したスレッドのウィンドウしかフックできない模様。 WH_KEYBOARDも試してはいないが同じ結果になると思う。 少なくともこれだけではポインタが指すウィンドウのハンドルは取得できない。

次にWH_MOUSE_LLを使う方法を試す。 LLはLowLevelの略であり、マウスの動きをウィンドウ単位ではなく画面単位で監視する。 しかし今度は低レベルすぎて、ウィンドウハンドルがコールバック関数のパラメータに含まれない。 これではポインタの指し示すウィンドウのハンドルがわからない。 しかし一方で新たな収穫があった。 この低レベルフックは別にDLLを作らなくても使えるというのがわかった。 Windows2000以降にしか対応していないとのことだが、どうせ世間にはXPとVistaばっかり出回っているので問題ない。

今回のプログラムはVistaで実行したため、Vistaの権限の制限が悪さをした可能性も考え、 ChangeWindowMessageFilterでフィルタを解除する事も試してみたものの、 関係ない事が判明した。 今構想中のプログラムで必要になるかもしれないので、これはこれで記憶の隅にとどめておく事にする。

最終的には、スクリーン座標からウィンドウハンドルが得られる方法を探す事にした。 ClientToScreenScreenToClientはまったく役に立たず、 EnumWindowsはさすがに手間がかかりすぎる。 紆余曲折を経て、WindowFromPosisionというあまりにもそのまますぎる関数を発見した。 この関数と低レベルフックを組み合わせ、マウスポインタの指すウィンドウのハンドルを取得する事に成功した。

以上本日のメモ終わり

参考URL抜粋

上記内容とは別に見つけた面白そうなページ

トラックバック(0)

トラックバックURL: http://nesitive.net/mt/tbping/165

コメントする

アーカイブ

ウェブページ

Powered by Movable Type 4.21-ja

このブログ記事について

このページは、が2008年6月 9日 23:33に書いたブログ記事です。

ひとつ前のブログ記事は「Video for windows メモ」です。

次のブログ記事は「Mozilla開発環境構築のメモ」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。