Autohotkey-如果按下新键,GetKeyState 会中断

Autohotkey-如果按下新键,GetKeyState 会中断

我正在尝试创建一个脚本,只要按下空格键,它就会按下。例如,如果我按住空格键,脚本将使用复制空格Send。一旦我释放空格键,它就会停止发送空格。我已经用这个脚本实现了这一点

#NoEnv
#SingleInstance Force
SendMode Input
loop {
    if (GetKeyState("Space"))
    {
        Send {Space down}
        Random, r, 5, 15
        Sleep, %r%
        Send {Space up}
    }
    Random, r, 5, 10
    Sleep, %r%
}
Esc::
ExitApp
return

这可以正常工作,但是,如果我在按下空格键的同时按下一个新键,则GetKeyState("Space")由于某种原因会返回 false。脚本当前可以正常启动,但是按下任何其他键都与释放空格键相同,这不是我想要的。

于是我想,也许这Input能帮我。好吧,又一次,它奏效了,但只要我按下另一个键,它就会停止。

这是我尝试过的Input,产生相同的结果,相对而言(时间上有偏移),与我尝试的第一个样本相比。

#NoEnv
#SingleInstance Force
SendMode Input
loop {
    Input, OutputVar, B I L4 T0.05 V ; Had to keep it a low timeout due to the nature of the script
    if (InStr(OutputVar, Chr(32)))
    {
        Send {Space down}
        Random, r, 5, 15
        Sleep, %r%
        Send {Space up}
    }
    Random, r, 5, 10
    Sleep, %r%
}
Esc::
ExitApp
return

这也会失败,因为按下新键会在内部释放我按下的空格键。

我会尝试执行类似 的键绑定事件Space::,但它也会从Send命令中触发,从而产生无限循环。而且我不想按除空格之外的任何其他键,因为我的几个键已绑定到某个东西或其他东西。

它感觉像筛选键或粘滞键,因为即使没有自动热键,按下任何其他键后空格键也会释放。但这两个功能都已关闭。而且不仅仅是空格键。按下新键后,任何按住的键都会释放。筛选键正是我想要阻止的,但没有所谓的“反向筛选键”。是否有可能克服这个硬件限制?我如何让自动热键工作,让它看到我按住空格键,即使在按下新键之后?

答案1

这虽然很老了,但它可以帮助未来遇到同样问题的人们。

而不是用来GetKeyState("Space")检查GetKeyState("Space", "P")密钥的物理状态

答案2

当在空格键后按下另一个键时,GetKeyState 不再捕获空格键。这就像当您长按“A”时,然后继续长按“B”而不释放“A”时,您得到的不是“aaaababab”,而只是“aaabbbbb”。我不明白当您按下空格键时按下其他键时您想做什么(可能是您想要组合发送?),但我相信您试图实现的目标是不可能的。

相关内容