AutoHotKey - 按住键


1

我有一个AutoHotKey脚本,F3当我按住时应该点击Ctrl,并F2在我释放时点击Ctrl

我的脚本目前:

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

但是当我压抑Ctrl时,它什么也没做。当我释放Ctrl,它击中两个F3F2。谁能告诉我如何解决这个问题?

Answers:


1

通过:http//www.autohotkey.com/docs/commands/Send.htm

按住或释放键:括起键的名称,后跟单词Down或Up。例如:

发送{b down} {b up}
发送{TAB down} {TAB up}
发送{Up down}; 按下向上箭头键。
睡1000; 保持一秒钟。
发送> {Up up}; 释放向上箭头键。

当通过上述方法按下某个键时,它不会像您实际按住它时那样开始自动重复(这是因为自动重复是驱动程序/硬件功能)。但是,循环可用于模拟自动重复。以下示例发送20个选项卡击键:

循环20 {
发送{Tab down}; 自动重复由连续的下行事件组成(没有上行事件)。
睡30; 击键之间的毫秒数(或使用SetKeyDelay)。
}
发送{Tab up}; 释放钥匙。

也可以使用DownTemp这个词。除了修改键(Control / Shift / Alt / Win)之外,它的效果与Down相同。在这些情况下,DownTemp告诉后续发送密钥不会永久关闭,并且只要按键调用它就可以释放。例如,发送{Control DownTemp}后面的Send a将产生正常的“a”击键,而不是control-A击键。


问题不在于发送密钥,而是热键触发。
尼尔森

1

此代码提供您所需的功能:

$~ctrl::
    send {f3}
    keyWait, ctrl
    send {f2}
return

〜修饰符使热键不会阻止热键,因此您实际上是在发送Ctrl + F3和Ctrl + F2。
尼尔森

不,它只发送F3。试试我的代码。将其中一个F键更改为S并在Word文档中执行它。它只会发送S,而不是Ctrl-S来保存。需要波形符以防止KB挂钩等待输入,否则它将无法工作。(这就是为什么你的新答案与省略的代字号完全相同,但它花了两倍的线。)
adaaaam

0

热键的keyup选项似乎是你需要的。

这是经过测试的工作代码:

Ctrl::
Send {F3}
keywait, Ctrl, L ; prevent F3 from firing while Ctrl is being held down.
return

Ctrl Up::Send {F2}

我不知道如果您尝试运行此脚本并尝试使用基于CTRL的快捷键(如CTRL + C)会发生什么。我认为这个脚本会阻止它。
尼尔森

这个问题已经在这里找到了一个工作脚本:superuser.com/a/815704/239384
adaaaam 2016年

此外,KeyUp是不必要的,你创建了多个热键,增加了复杂性
adaaaam 2016年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.