AutoHotKey:SetTimer 的双击脚本出现故障

AutoHotKey:SetTimer 的双击脚本出现故障

如果一封信带有修饰语,并且正在通过双击脚本发送,则设置定时器,触发键之前的修饰键(在本例中为 shift)将与字母上已有的任何修饰键一起包含在字母上。

使用下面的脚本,由于某种原因,shift 被添加到 ^A,因此发送 F。

这似乎不会发生在数字或需要位于 { } 内的键上,例如 {F1}。

有什么线索吗?

; Testers:    
+^A:: Send, F    
^A:: Send, T    
    
+^B:: Send, F    
^B:: Send, T    
    
; Malfunctioning double press:    
    
+PGDN Up::    
if (SHIFTPGDN_presses > 0)    
{    
    SHIFTPGDN_presses += 1    
    return    
}    
SHIFTPGDN_presses := 1    
SetTimer, KeySHIFTPGDN, -300    
return    

KeySHIFTPGDN:    
if (SHIFTPGDN_presses = 1)    
{    
    Send, ^A    
}    
else if (SHIFTPGDN_presses = 2)     
{    
    Send, ^B    
}    
SHIFTPGDN_presses := 0    
return    

答案1

不确定到底发生了什么,但您可以尝试使用SendInput或(有时与/SendMode Input略有不同)。 SendSendPlay

您可以尝试的另一个命令是KeyWait,它可用于等待直到原始修饰符被松开。但这可能不会产生预期的效果,因为它会导致延迟直到您松开修饰符。

您还可以尝试将实际的修饰符向上发送,例如Send {Shift Up}Send {Ctrl Up}。在某些情况下,这也可能引发问题,但有时也会有所帮助,具体取决于您正在做的事情。

而且,如果您尝试从另一个热键触发热键,则可能需要查看SendLevel(我认为您不是通过快速浏览代码来做到这一点的,而只是供您参考)。

答案2

该脚本必须等待 PGDN 键被释放才能执行命令:

+PGDN::    
if (SHIFTPGDN_presses > 0)    
{    
    SHIFTPGDN_presses += 1    
    return    
}    
SHIFTPGDN_presses := 1    
SetTimer, KeySHIFTPGDN, -300    
return    

KeySHIFTPGDN:  
KeyWait, PGDN  ; wait for the PGDN to be released 
if (SHIFTPGDN_presses = 1)
    Send, ^a   
else if (SHIFTPGDN_presses = 2)
    Send, ^b 
SHIFTPGDN_presses := 0    
return

相关内容