多击检测1号 := new 多击检测("a", "a_callBack") ; 拦截并检测a键的多击情况,结果返回到函数 a_callBack() 多击检测2号 := new 多击检测("~b", "b_callBack") ; 检测b键的多击情况,结果返回到函数 b_callBack() Sleep 5000 多击检测2号.Close() ; 必须手动调用 .Close() 方法关闭 多击检测2号 := "" MsgBox 0x42030, 关闭热键演示, 多击检测2号已关闭 return a_callBack(i) { ToolTip %i%击了a } b_callBack(i) { ToolTip %i%击了b } class 多击检测 { ; By 空 __New(key, fnCallback) { this.key := key this.keystrokes := 0 this.fnCallback := fnCallback boundFunc := ObjBindMethod(this, "_Press") this.boundFunc := &boundFunc Hotkey % this.key, % boundFunc } _Press() { if (this.keystrokes = 0) { boundFunc := ObjBindMethod(this, "_Checker") SetTimer % boundFunc, -400 } this.keystrokes += 1 } _Checker() { fnName := this.fnCallback %fnName%(this.keystrokes) this.keystrokes := 0 } ; Hotkey 会保留 boundFunc 的引用,所以在 ObjRelease 前无法触发 __Delete(),所以只能手动释放 Close() { Hotkey % this.key, Off ObjRelease(this.boundFunc) } }
声明:站内资源为整理优化好的代码上传分享与学习研究,如果是开源代码基本都会标明出处,方便大家扩展学习路径。请不要恶意搬运,破坏站长辛苦整理维护的劳动成果。本站为爱好者分享站点,所有内容不作为商业行为。如若本站上传内容侵犯了原著者的合法权益,请联系我们进行删除下架。
评论(0)