我想知道我的代码是否有问题。我尝试使用 F2 写一个切换代码来向 ctrl 发送垃圾邮件。它可以很好地完成垃圾邮件的工作,但是当我再次按下 F2 将其关闭时,它仅偶尔起作用。想知道垃圾邮件是否干扰了我的 F2 密钥,从而使它无法正常运行。下面是代码。另外,我是否可以使用修饰符,使代码在后台的单独窗口上运行?
F2::
Toggle := !Toggle
loop
{ If not Toggle
{
Send, {LCtrl Up}
break
}
Send, {LCtrl Down}
sleep, 200
Send, {LCtrl Up}
}
Return
答案 0 :(得分:1)
另一种方法:
; autoexecute-section (top of the script):
loop_enabled := false ; the loop is disabled by default
#MaxThreadsPerHotkey 2 ; allows us to invoke F2 even if the previous invocation of F2 hasn't completed.
; Press F2 down to enable the loop (the $ symbol facilitates the "P" mode of GetKeyState below).
$F2:: loop_enabled := true
#If (loop_enabled) ; If you enable the loop by pressing F2 down
$F2 Up:: ; release F2 to start the loop
ToolTip, Looping
Loop
{
Send, {LCtrl Down}
Loop 20
{
If !GetKeyState("F2", "P")
sleep, 10
}
Send, {LCtrl Up}
If GetKeyState("F2", "P") ; by pressing F2 while the loop is enabled
{
Send, {Blind}{LCtrl Up}
ToolTip
loop_enabled := false ; disable and
break ; terminate the loop
}
}
Return
#If
答案 1 :(得分:0)
您的脚本没问题。发生这种情况是因为循环控制了过程,而在那一刻,热键没有响应-设计使然。
对于此应用程序,我将整个应用程序编写为循环。这虽然不太紧凑,但是应该很健壮,并且可以清楚地说明发生了什么。
下面是一个有效的示例。
要调整重复速度,请更改T_press
和T_release
常量。
另外,您可以更改sleep 10
来增加/减少循环的速度。
Toggle := 0
ticks := 0 ; 'clock' counter
R_prev := getkeystate("F2")
T_press := 4 ; ticks before Ctrl press
T_release := 40 ; ticks before Ctrl release
tooltip, Paused
loop
{
sleep 10 ; loop interval
R := getkeystate("F2")
RX := (R > R_prev)
R_prev := R
if RX {
if Toggle {
Toggle := 0
ticks := 0
send {LCtrl up}
tooltip, Paused
} else {
Toggle := 1
}
}
if Toggle {
ticks += 1
if (ticks = T_press) {
send {LCtrl down}
; tooltip, Pressed -- %ticks%
}
if (ticks = T_release) {
send {LCtrl up}
; tooltip, Released -- %ticks%
ticks := 0
}
tooltip, ctrl_on: %pressed% --- %ticks%
}
}
答案 2 :(得分:0)
另一种好的方法是使用Timers。
事实证明计时器是可以中断的,因此立即停止计时器应该没有问题。
对于您的任务-诀窍是将两个计时器设置为相同的周期,并始终以偏移量启动它们。
(请参见sleep 120
行)。您可以根据自己的需要调整时间和期限。
settimer, fire_stop, 400
settimer, fire, 400
settimer, fire, off
settimer, fire_stop, off
Toggle := 0
F2::
Toggle := !Toggle
if Toggle {
settimer, fire_stop, on
sleep 120 ; offset between timers
settimer, fire, on
gosub fire
} else {
settimer, fire, off
settimer, fire_stop, off
gosub fire_stop
}
return
fire:
tooltip "key is down"
send {LCtrl down}
return
fire_stop:
tooltip "key is up"
send {LCtrl up}
return