热键使用普通循环容易卡顿失效,而改为定时器循环则不会。
↓↓↓↓↓↓↓↓以下是使用定时器的一个例子源码↓↓↓↓↓↓↓↓
;---------------------------------------
; 用定时器代替循环的例子 By FeiYue
;
; 说明:热键使用普通循环容易卡顿失效,而改为定时器循环则不会
;---------------------------------------
定时器执行(myfunc="", ByRef arg1="", args*)
{
static last:="", timer:=[]
Critical
if (i:=InStr(arg1, "^_^"))
{
if GetKeyState(SubStr(arg1,1,i-1), "P")
{
Critical, Off
return arg1:=SubStr(arg1, i+3)
}
last:=""
SetTimer,, Off
Exit
}
if (key:=LTrim(A_ThisHotkey, "~$*!^+#<>"))=""
Exit
s:=key "^_^" myfunc "@" arg1
For i,v in args
s.="@" v
if (s=last)
Exit
For i,v in timer
SetTimer, % v, Off
if !(v:=timer[last:=s])
timer[s]:=v:=Func(myfunc).Bind(key "^_^" arg1, args*)
SetTimer, % v, 1
Exit
}
F1:: Reload ;-- 重启
F2:: Suspend ;-- 暂停热键
$1:: 函数1("a") ;-- 初始的 Loop 循环函数
$2:: 函数1("b") ;-- 初始的 Loop 循环函数
$3:: 函数2("c") ;-- 修改后的 定时器 循环函数
$4:: 函数2("d") ;-- 修改后的 定时器 循环函数
函数1(k, k1="", k2="", k3="")
{
key:=LTrim(A_ThisHotkey, "~$*!^+#<>")
While GetKeyState(key, "P")
{
Send % k
Sleep, 30
}
}
函数2(k, k1="", k2="", k3="")
{
定时器执行(A_ThisFunc, k, k1, k2, k3)
Send % k
Sleep, 30
}
飞跃老哥的代码值得研究!
研究研究
111
居然看不懂
积分不够,评论来凑
好巧,我也看不懂
飞跃大佬, 能不能把帮助里的Settimer 示例 三击. 多击的示例. 做成通用的函数?
坚持学