2003/5/11公開
2003/9/13更新

HSP上でリアルタイムなメッセ−ジ処理

HSP Ver2.6で予定されていたメッセージ取得機能の搭載は、次期バージョンに持ち越されました。ですが現状のVer2.6でもメッセージの取得を行う方法があります。

一つはプラグインを使ってサブクラス化を行い、取得したメッセージをバッファにためておき、それをスクリプトから参照する方法です。

この方法を使用したプラグインは既にいくつか公開されていて、現状のHSPでは、おそらくこの方法がベストだと思います。しかし、この方法ではリアルタイムなメッセージ処理が行えないため、一部のメッセージに対する処理が行えません

もう一つの方法はプラグインでサブクラス化を行い、メッセージを受け取った後HSPの割り込みを発生させる方法です。HSPの割り込みとはbuttonやonkey、onexitといった命令で設定する割り込みです。

いくつかある割り込みの内、onexitはWM_QUERYENDSESSIONに対応する必要があるために、メッセージが送られるとそのまま割り込みを発生してスクリプトの処理を行います。これを利用すればHSP上でリアルタイムなメッセージ処理が行えます。

しかし、割り込みにはgotoと同じでジャンプ元に返ってこないという問題があります。これはbutton命令などでも同様ですが、あるルーチンを実行中に割り込み処理が発生すると、もうそのルーチンには返ってきません。このためプログラムのスタイルを工夫する必要があります。

そのため、万能とはいえませんが、イベントに反応することが処理の大部分を占めるようなプログラムの作成では、この方法でのメッセージ処理が役に立つとおもいます。

この方法を使用したプラグインは見かけなかったので、作成してみました。

※intmsg.dllを使用する上で問題となることが、いくつか判明しています。以下の点に注意してスクリプトを書いてください。
1.onexit割り込みの後stop命令を実行すると、CPU使用率が100%になります。stopの直前にawait 0を入れて、これを回避してください。
2.onexit割り込みの後HSPのエラー(文法の間違いなど)が発生しても、エラー表示されずにそこで実行がストップします。このため、エラーがあっても気付かないなどの問題が発生します。回避方法は現在のところ不明です。

HSP ver2.61で修正されています。

intmsg.dll Ver0.91
ダウンロード

intmsg.dll Ver0.91ランタイム(HSP Ver2.61a)
ダウンロード

・履歴

Ver 0.9
Ver 0.91
・GetExWndMsg,FreeExWndMsgを追加



戻る