レイクの紹介サイト、 レイクの紹介サイトのお得な情報、 レイクの最新情報、 レイクのウラ情報など、 レイクに関することの総合情報サイト。
番号  テナガエビ  ゲーム  特急  陶製  あいさつ  国産  を通じて  おいしい  バーベキュー    懐石  ダウンロード  周年  湖面  事典  グランド  そして  免許  鎌倉 

フックとは?/ レイク

[ 757] フックのしくみ
[引用サイト]  http://www.kab-studio.biz/Programing/Codian/DLL_Hook_SClass/06.html

さて、フックです。通常ユーティリティアプリケーションで使用するのは「システムフック」ですが、その前に、フックを理解するために「ローカルフック」について見てみようと思います。
送られてきたメッセージは、一部を除いてメッセージキューと呼ばれるものに順番に蓄えられます。キューはひとつのスレッドにつきひとつだけ存在するので、スレッドが持つすべてのウィンドウ宛のメッセージがごちゃ混ぜになって積み重ねられることになります。
ここまでは規定のシステムで、何もしなくても普通にプログラムを組めば行えるものですが、ここからは実際にプログラムを組まなければならない部分です。
ウィンドウプロシージャは、ウィンドウクラス登録時に特定のウィンドウへと結びつけられる関数のことで、例えば次のような関数を用意します。
このような手順でウィンドウプロシージャはメッセージを受け取り、プログラマーはそのための処理をプログラムすることになります。MFCではメッセージループを内部に持ち、メッセージは「メッセージハンドラ」と呼ばれる関数へと送られ、そのなかに処理を組み込むことになります。
このメッセージの流れを見れば分かるとおり、プログラミングする部分はわずかです。基本的には、メッセージループとウィンドウプロシージャを組むだけです。そして逆に言えば、それ以外の部分に手を出すことができないということでもあります。
例えば特定のキー入力やマウスクリックを無効化したいときなどにはどうすればいいのでしょう。ウィンドウプロシージャの中で処理を組む場合、複数の種類のウィンドウが存在したら、そのすべてのプロシージャで処理しなければならなくなります。また、組み込みコントロール(ボタンとか)は、プロシージャを内部に持つため、プログラムで変更することができません(「サブクラス化」すればできますが、それはのちほど)。
さらに、MFCを使うにしても、SDKにしても、メッセージループの中で処理を行うのは難しいところがあります。メッセージループはプログラムの中でももっとも深い部分ですので、この部分に手を加えたらどんな影響が出てくるのか心配です。
プログラム上のフックは、前述のメッセージの流れの中から、メッセージを引っかけて拾い上げてしまうというものです。さらに、このメッセージを破棄したり、他のウィンドウへ送ったりということもできます。
拾い上げたフックは、フックをセットしたときに指定した関数、フックプロシージャへと送られます。これはウィンドウプロシージャとほぼ同じもので、このフックプロシージャで横取りしたメッセージを処理することができます。
この便利さゆえ、フックはしばしばアプリケーションに致命的なダメージを与えることがあります。そうならないようできる限り回避するため、フックにはいくつか種類があり、拾えるメッセージや拾う場所の違う色々な種類のフックが用意されています。
ローカルフックは、自分のスレッドのみに働くフックのことです。それほど使い道はありませんが、モーダレスダイアログをモーダルダイアログに見せかけたり、作製されたダイアログのボタン等を手当たり次第取得したい場合などに使用します。
グローバルフックは別名システムフックと呼ばれ、すべてのスレッドにセットされ働きます。システムフックはすべてのウィンドウのすべてのメッセージを横取りすることができるという、まさにユーティリティアプリケーションにうってつけの機能です。その分危険度が多く、バグがシステム全体に影響を与えてしまいます。
このふたつははっきりと目的が違います。ローカルフックは自分のアプリケーションで特殊な処理を行いたいときに使用し、システムフックはユーティリティアプリケーションでシステムをコントロールしたいときに使用します。
ですが、基本的なシステム、そして手順はほとんど同じです。違う点はただひとつ、システムフックはDLLになければならないという点だけです。
このふたつとは別に、フックには様々な種類があります。以下に主なフックを表としてまとめておきます(筆者は以下の各フックについて詳しくはありません。実際に使用するときには、各フックプロシージャのリファレンスをよく読んでください)。
というわけで、概念の説明はここまで。次回からは実際にフックを使用して、どんな感じになるのか見てみましょう。

 

戻る

レイクの紹介サイト、 レイクの紹介サイトのお得な情報、 レイクの最新情報、 レイクのウラ情報など、 レイクに関することの総合情報サイト。
レイクの紹介サイト、 レイクの紹介サイトのお得な情報、 レイクの最新情報、 レイクのウラ情報など、 レイクに関することの総合情報サイト。