フックには、スレッド固有のフックとグローバルなフックがありますが、今回はグローバルフックを使ってみます。 グローバルフックを使えば、ウインドウズがアプリケーションに送るメッセージを監視することができます。マウスカーソルを自動的に動かしたり、ボタンを勝手に押してくれるようなソフトもフックを使っていると思われます。 グローバルフックのフックプロシージャはDLLに置かないといけないので、グローバルフックを使うプログラムではDLLを作る必要が出てきます。また、DLLはアプリケーション1つにつき1つずつ読み込まれて、それぞれが独自のデータ領域を持つようなのですべてのDLLで共通に使用できる共有領域を作る必要があります。この領域には、フック プロシージャのハンドルを格納します。これを共有領域に置かないと複数のフックを組み込んだときにうまく動かないことがあります。 フックの種類 フックの種類を示します
で、各値の解説です。 (A) ジャンプコード(3byte) この部分はプログラムとして実行されます。 このままプログラムを進めると、どんな値が入ってるかわからないこの構造体を命令として読みこんでしまうため、この構造体の後ろまでプログラムカウンタを進めるコードが入ります。 手もとの環境では「EB 3C 90」でしたが、「EB 3C」は「jmp 3Ch」、つまり0x3C=60バイト進む命令です。60バイトと言うとちょうど(構造体のサイズ62byte)-(この命令の2byte)です。 「90」は「NOP(No Operation)」で何も実行しない命令です。 よって、プログラムは構造体を飛び越えて実行して行きます。 (B) OEMラベル(8byte) 通常フォーマットしたOS等が文字列で入ります。 「MSWIN4.1」とか「MSDOS5.0」とか入るようですが、なぜか手元のは「*_-K>IHC」
他のアプリケーションに送られているメッセージを監視したいと考えたことがあると思います。 しかし、Win32環境では、普通は他のプロセスへ送られているメッセージを知ることはできません。 そこで使うのが、SetWindowsHookExというAPIです。 このAPIを使えば、メッセージフックを実現できます。 定義は、次のようになっています。 HHOOK SetWindowsHookEx(int nFilterType, HOOKPROC hkprc, HINSTANCE hMod, DWORD dwTreadID) nFilterType フィルタ関数のタイプや、アプリケーションへ送られる途中で、フィルタへ迂回されるメッセージの種類を指定します。 いくつか種類がありますが、ここではWH_CALLWNDPROCを使います。 hkprc フックプロシージャへのポインタです。 dwThreadIDに
さて、ユーティリティーアプリケーションにとって欠かすことのできない「システムフック」について見てみましょう。 と、今回のコードは前回のものをかなり流用するのでご注意を。それだけ、ローカルフックとシステムフックはほぼ同じということでもありますね。それに、今回はDLLを作製するので、その辺もマスターしてからお読みください。 ローカルフックとの違い グローバルフックは、単純に言えばすべてのスレッドにセットされるローカルフックです。基本的なシステム、方法はローカルフックとほとんど同じですので、フックをセットすること自体はそれほど難しいことではありません。 ただ、次のふたつの点に注意してください。 まずひとつは、システムフックを使用すると、他のアプリケーションがセットしたフックとフックプロシージャが継ながるということです。前回説明したとおり、SetWindowsHookEx()を使ってフックプロシー
All Microsoft Global Microsoft 365 Teams Copilot Windows Surface Xbox Deals Small Business Support Software Windows Apps AI Outlook OneDrive Microsoft Teams OneNote Microsoft Edge Skype PCs & Devices Computers Shop Xbox Accessories VR & mixed reality Certified Refurbished Trade-in for cash Entertainment Xbox Game Pass Ultimate PC Game Pass Xbox games PC and Windows games Movies & TV Business Micro
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く