マウスクリック関数

作りっぱでほかしてあったやつ。ちょっと前に 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
}