我正在尝试创建一个脚本,只要按下空格键,它就会按下。例如,如果我按住空格键,脚本将使用复制空格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”。我不明白当您按下空格键时按下其他键时您想做什么(可能是您想要组合发送?),但我相信您试图实现的目标是不可能的。