如果一封信带有修饰语,并且正在通过双击脚本发送,则设置定时器,触发键之前的修饰键(在本例中为 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
略有不同)。 Send
SendPlay
您可以尝试的另一个命令是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