#SingleInstance Force

1::
2::
3::
%A_ThisHotKey%Key := New ClickAndLongClick()
if (%A_ThisHotKey%Key = "0")
  MsgBox %A_ThisHotKey%单击
 else if (%A_ThisHotKey%Key = "00")
  MsgBox %A_ThisHotKey%双击
 else if (%A_ThisHotKey%Key = "1")
  MsgBox %A_ThisHotKey%长按
 else
  MsgBox % "按键模式 " %A_ThisHotKey%Key
Return

4::ToolTip % n := n="" ? 1 : ++n

; 开启#MaxThreadsBuffer会导致此类库失效
Class ClickAndLongClick {
  __New(timeout:=200) {
    tout := timeout/1000
    , key := RegExReplace(A_ThisHotKey, "[\*\~\$\#\+\!\^]")
    Loop {
      time := A_TickCount
      KeyWait %key% ; , T%tout%  ; 等待 按键被释放.
      if ErrorLevel {
        KeyWait %key%
        Return 1
       } else {
        Pattern .= A_TickCount-time > timeout
        Critical
        KeyWait %key%, DT%tout%  ; D: 等待按键被按下.  T: 超时
        Critical, Off
        if ErrorLevel
          Return Pattern
      }
    }
  }
}

/*   原版备份
F1::
  p := ClickAndLongClick()
  If (p = "0")
    MsgBox 单击
  Else If (p = "00")
    MsgBox 双击
  Else If (p = "1")
    MsgBox 长按
  Else
    MsgBox 按键模式 %p%
Return

ClickAndLongClick(timeout:=150) {
   tout := timeout/1000
   key := RegExReplace(A_ThisHotKey, "[\*\~\$\#\+\!\^]")
   Loop {
    time := A_TickCount
    KeyWait %key%
    Pattern .= A_TickCount-time > timeout
    KeyWait %key%, DT%tout%
    If ErrorLevel
     Return Pattern
   }
}
*/

 

声明:站内资源为整理优化好的代码上传分享与学习研究,如果是开源代码基本都会标明出处,方便大家扩展学习路径。请不要恶意搬运,破坏站长辛苦整理维护的劳动成果。本站为爱好者分享站点,所有内容不作为商业行为。如若本站上传内容侵犯了原著者的合法权益,请联系我们进行删除下架。