我有一个 AutoHotKey 脚本,F3当我按住时它会触发Ctrl,F2当我释放时它会触发Ctrl。
我的脚本目前:
$ctrl::
Suspend, On
Send, {F3}
While (GetKeyState("Ctrl",P))
{
}
Send, {F2}
Suspend, Off
Return
但当我按住 时Ctrl,它什么也没发生。当我释放 时Ctrl,它会同时击中F3和F2。有人能告诉我如何解决这个问题吗?
答案1
此代码提供您所需的功能:
$~ctrl::
send {f3}
keyWait, ctrl
send {f2}
return
答案2
这键向上热键选项似乎正是您所需要的。
这是经过测试的工作代码:
Ctrl::
Send {F3}
keywait, Ctrl, L ; prevent F3 from firing while Ctrl is being held down.
return
Ctrl Up::Send {F2}
答案3
通过:http://www.autohotkey.com/docs/commands/Send.htm
要按住或释放某个键:将键名括在括号中,后跟单词 Down 或 Up。例如:
发送 {b down}{b up}
发送 {TAB down}{TAB up}
发送 {Up down} ; 按下向上箭头键。Sleep
1000 ; 保持一秒钟。
发送> {Up up} ; 释放向上箭头键。
通过上述方法按住某个键时,它不会像您物理按住它那样开始自动重复(这是因为自动重复是驱动程序/硬件功能)。但是,可以使用循环来模拟自动重复。以下示例发送 20 次 Tab 键击:
Loop 20 {
发送 {Tab down} ; 自动重复由连续的向下事件(没有向上事件)组成。Sleep
30 ; 击键之间的毫秒数(或使用 SetKeyDelay)。
}
发送 {Tab up} ; 释放该键。
也可以使用单词 DownTemp。其效果与 Down 相同,但修饰键除外(Control/Shift/Alt/Win)。在这些情况下,DownTemp 会告知后续发送,该键并非永久按下,并且可能会在需要时释放。例如,Send {Control DownTemp} 随后发送 Send a 会产生正常的“a”键击,而不是 control-A 键击。