マウスクリック関数
作りっぱでほかしてあったやつ。ちょっと前に AutoHotKey Threadでダブルクリック検知についてのレスがあったので出してみる。
トリプルとかクワクトブル(でいいのか?)クリックとかも検知したくて作ってみたやつです。
- MultiClickCheck(button,MaxCount=2,timout=0)
- 割と厳密な多重クリックチェック
;てきとうなダブルクリックチェック例 ;Rbutton Up:: WClick_test: WClickTime := DllCall("User32.dll\GetDoubleClickTime",Int) if (A_PriorHotkey = A_ThisHotkey) && (A_TimeSincePriorHotkey < WClickTime) { ;ダブルクリック時処理 } else { ;シングルクリック時処理 } return
MultiClickCheck(button,MaxCount=2,timout=0) ;------------------------------------------------------------------ ; 割と厳密な多重クリックチェック ; 対象: NT系 AHK v1.0.34以降 ; in button 対象マウスボタン ; MaxCount チェックする最大クリック回数(0で無制限) ; timout タイムアウト(デフォルト=システムWクリック時間) ; 戻り値 : マウスクリック回数 ;------------------------------------------------------------------ { ;1クリック目が発生してないなら即終了 ifInstring button, Xbutton, StringRight,button,button,8 else StringRight,button,button,7 GetKeyState, push, %button%, P ifEqual,push,U, return 0 ;--- タイムアウト時間セット --- if (timout <= 0) timout := DllCall("User32.dll\GetDoubleClickTime",Int) timout += A_TickCount ;--- ダブルクリック位置許容範囲を取得 --- MouseGetPos, x1 , y1 SysGet,cx,36 ;SM_CXDOUBLECLK SysGet,cy,37 ;SM_CYDOUBLECLK ph = 1 MaxPh := MaxCount*2 -1 Loop { ;--- マウスクリック/解除チェック --- if (1 = mod(ph,2)) KeyWait, %button%, U T0.01 ;奇数フェース:クリック解除まち else KeyWait, %button%, D T0.01 ;偶数フェーズ:クリック待ち ifEqual ErrorLevel,0, EnvAdd,ph,1 IfGreater,A_TickCount,%timout%, break if (0 < MaxCount) && (ph > MaxCount*2-1) break ;--- マウス移動量チェック --- MouseGetPos, x2 , y2 if ( (x1 > x2) && (x1-x2 > cx) ) || ( (x2 > x1) && (x2-x1 > cx) ) break if ( (y1 > y2) && (y1-y2 > cy) ) || ( (y2 > y1) && (y2-y1 > cy) ) break } return % ph // 2 }