ACT-2今回はhsgetmsg.dllが提供する拡張プラグイン命令と、hsgetmsg.asで定義されているモジュール命令の使い方を説明します。hsgetmsg.dllのメッセージ取得機能を使ったスクリプトを書く場合には、メッセージが送られているかどうかを常に監視しなければならにために、スクリプトの全体的な構成を以下のようにしなければなりません。ウィンドウをサブクラス化する取得するメッセージを設定する(複数ある場合はその数だけ指定)メインループ中で以下の操作を行なうメッセージが取得されているかどうかを調べるメッセージが取得されている場合には、そのメッセージに応じた処理をするメッセージが取得されていない場合には、waitまたはawaitを実行する。ループごとに実行すべき処理があれば、それを実行する。ウィンドウのサブクラス化ウィンドウのサブクラス化を行なうには2つの方法があります。モジュール命令のset_subclassを使う通常はこちらのほうで大丈夫でしょう。set_subclassパラメータなし現在描画中のHSPウィンドウのサブクラス化を行ないます。この命令後、サブクラス化に成功するとstatにウィンドウハンドルが格納されます。失敗すると0が格納されます。メッセージ取得時にモジュール命令get_messageを用いた場合にはstatにウィンドウIDが、DLL命令ll_getmessageを用いた場合にはstatに(ウィンドウID+1)の値が代入されます。p3p1:サブクラス化するウィンドウのハンドルp2:gm_getmessage実行時にstatに格納する値p1にはサブクラス化するウィンドウのハンドルを指定します。このパラメータを省略するか0を指定すると、現在描画先に指定されているウィンドウが指定されます。p2の値は、gm_getmessageを実行してメッセージを取得したときに、そのメッセージがこのウィンドウに送られたメッセージだった場合にstatにこの値を格納します。複数のウィンドウをサブクラス化する場合にそれらを識別する値として用いることができます。上記のモジュール命令set_subclassでは、この値として(ウィンドウID+1)を指定しています。この命令後、サブクラス化に成功するとstatに0が格納されます。失敗すると0以外の値が格納されます。設定可能なウィンドウの数に制限はありません。一度設定されたウィンドウに対して行なっても、効果はありません。HSPウィンドウに対してサブクラス化を行なう場合にはset_subclassを使った方がよいでしょう。gm_setwndprocを使うことはほとんどないと思います。取得するメッセージの設定メッセージの設定には以下の2つの方法があります。モジュール命令のset_messageを使う描画先に指定されているHSPウィンドウに対してメッセージを設定する場合にはset_messageを使います。通常はこちらを使用します。p2p1:ウィンドウハンドルp2:設定するウィンドウメッセージコードウィンドウメッセージには、メッセージコードのほかに、2つの付加情報とともにウィンドウプロシージャへ送られます。この2つのパラメータは、wParamパラメータおよびlParamパラメータと呼ばれています。これらのパラメータとして、どのような情報が送られてくるのかはメッセージによって異なります。hsgetmsg.dllでは、送られてきたメッセージのwParamパラメータやlParamパラメータの値によってそのメッセージを取得するかどうかを制限したり、もしくはメッセージを元のウィンドウプロシージャに送らないようにしたりするオプション指定ができます。これには、set_message命令やgm_setmessage命令を実行する直前にgm_setoptionを使います。p4p1:オプションフラグp2:wParamパラメータの設定p3:lParamパラメータの設定p4:戻り値の設定p1は以下の値を組み合わせによって指定します。メッセージ情報を保存しないただ、このgm_setoption命令を使うことはめったにないと思うので、よく分からなければ読み飛ばしてしまってもかまいません。メッセージの取得メッセージの取得には以下の2つの方法があります。p1p1:メッセージ情報を格納する数値型変数get_message命令は、取得されたメッセージがあれば、その情報を変数p1に格納します。取得メッセージがない場合には、p1.0の値が0になります。メッセージが送られたウィンドウがset_message命令によって設定されている場合は、システム変数statにメッセージを受け取ったウィンドウのIDが格納されます。gm_setmessage命令によって設定されたウィンドウの場合は、gm_setmessage命令の2番目のパラメータに指定した値から1を引いた値が格納されます。できるだけ以前のバージョンとの互換性を保つため、p1を省略した場合には、グローバル変数msgvalに格納されるようになっています。この命令を実行したときに、メッセージが送られていれば、指定された変数p1にはその情報が以下のように格納されます。p1:受け取ったメッセージ情報が格納される配列変数p1.0:メッセージを受け取ったウィンドウハンドルp1.1:取得したメッセージp1.2:wParamパラメータp1.3:lParamパラメータ一方、取得メッセージない場合にはp1.0に0が格納されるので、メッセージが送られているかどうかはこれで判断するようにしましょう。p1p1:メッセージ情報を格納する数値型変数gm_getmessage命令は、get_message命令と同様にしてメッセージを取得します。ウィンドウにメッセージが送られている場合は、システム変数statに、ウィンドウのサブクラス化の際にgm_setmessage命令の2番目のパラメータに指定した値が格納されます。見ればわかると思いますが、上のモジュール命令get_messageは、gm_getmessageを実行した後にstatの値を1小さくしているだけです。次回は具体的なスクリプトを作成して、実際にメッセージ取得の見本を見せてみたいと思います。