ウィンドウメッセージを取得してみる ACT-2

今回はhsgetmsg.dllが提供する拡張プラグイン命令と、hsgetmsg.asで定義されているモジュール命令の使い方を説明します。

hsgetmsg.dllのメッセージ取得機能を使ったスクリプトを書く場合には、メッセージが送られているかどうかを常に監視しなければならにために、スクリプトの全体的な構成を以下のようにしなければなりません。

  1. ウィンドウをサブクラス化する
  2. 取得するメッセージを設定する(複数ある場合はその数だけ指定)
  3. メインループ中で以下の操作を行なう
    1. メッセージが取得されているかどうかを調べる
    2. メッセージが取得されている場合には、そのメッセージに応じた処理をする
    3. メッセージが取得されていない場合には、waitまたはawaitを実行する。また、ループごとに実行すべき処理があれば、それを実行する。

ウィンドウのサブクラス化

ウィンドウのサブクラス化を行なうには2つの方法があります。

取得するメッセージの設定

メッセージの設定には以下の2つの方法があります。


ウィンドウメッセージには、メッセージコードのほかに、2つの付加情報とともにウィンドウプロシージャへ送られます。この2つのパラメータは、wParamパラメータおよびlParamパラメータと呼ばれています。これらのパラメータとして、どのような情報が送られてくるのかはメッセージによって異なります。

さて、hsgetmsg.dllでは、送られてきたメッセージのwParamパラメータやlParamパラメータの値によってそのメッセージを取得するかどうかを制限したり、もしくはメッセージを元のウィンドウプロシージャに送らないようにしたりするオプション指定ができます。これには、set_message命令やgm_setmessage命令を実行する直前にgm_setoptionを使います。

gm_setoption p1, p2, p3, p4
p1:オプションフラグ
p2wParamパラメータの設定
p3lParamパラメータの設定
p4:戻り値の設定

p1は以下の値を組み合わせによって指定します。

p1の値 意味
GM_F_WPARAM 3 wParamp2と等しいときのみ取得
GM_F_LPARAM 12 ($C) lParamp3と等しいときのみ取得
GM_F_RETVALUE 16 ($10) メッセージを元のウィンドウプロシージャには送らずに、p4の値を戻り値として返す
GM_F_THROWAWAY 32 ($20) メッセージ情報を保存しない

ただ、このgm_setoption命令を使うことはめったにないと思うので、よく分からなければ読み飛ばしてしまってもかまいません。

メッセージの取得

メッセージの取得には以下の2つの方法があります。


次回は具体的なスクリプトを作成して、実際にメッセージ取得の見本を見せてみたいと思います。