AutoHotKey-按住一个键

AutoHotKey-按住一个键

我有一个 AutoHotKey 脚本,F3当我按住时它会触发CtrlF2当我释放时它会触发Ctrl

我的脚本目前:

$ctrl::
Suspend, On
Send, {F3}
While (GetKeyState("Ctrl",P))
{
}
Send, {F2}
Suspend, Off
Return

但当我按住 时Ctrl,它什么也没发生。当我释放 时Ctrl,它会同时击中F3F2。有人能告诉我如何解决这个问题吗?

答案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 键击。

相关内容