タイトル通り、マウスボタンが長押しされた際に、割り込み処理をしたいと思っています。
しかし、そのようなウィンドウメッセージは用意されていないため、自前で判定する必要があります。
そこで、ダブルクリックの速さをGetDoubleClickTime関数で取得し、マウスボタンが押された時と離された時の時間の差が、それを下回れば長押しされたと判定できるのでは?
と考え、以下のようなプログラムを組みました。
結果から言うと、このプログラムは想定通りの動作をしませんでした。
#uselib "user32" #cfunc GetDoubleClickTime "GetDoubleClickTime" #define WM_LBUTTONDOWN $201 #define WM_LBUTTONUP $202 dctime = GetDoubleClickTime() oncmd *ld, WM_LBUTTONDOWN oncmd *lu, WM_LBUTTONUP stop *ld ldtime = (gettime(6) * 1000) + gettime(7) mes ldtime stop *lu lutime = (gettime(6) * 1000) + gettime(7) if lutime - ldtime > dctime { mes "長押し" } else : mes "クリック" stop
oncmdでWM_LBUTTONDOWNとWM_LBUTTONUPの割り込みを一緒に設定するとWM_LBUTTONDOWNが無視されるようです。
しかし、もし仮に想定通りの動作をしたとしても、スマートなプログラムではないので、良い方法があれば教えてください。
よろしくお願いします。