gpt4 book ai didi

autohotkey - 如何检测自动热键中同时按下两个键?

转载 作者:行者123 更新时间:2023-12-04 15:44:45 27 4
gpt4 key购买 nike

我正在努力寻找一种解决方案来检测同时按下 fj 以便如果只有 fj 被按下时,当前应用程序也收到 fj 但是当我按下 f 并且(在很短的时间内) j 同时当前应用程序没有收到 key 。

我知道在检测到 fj 后,我必须等待一小段时间(可能是 0.2 秒),以便确定我是否应该使用 send 将按下的 fj 提供给当前应用程序,或者如果我必须“吞下”两者并继续我的宏.然而,我应该怎么做,我不知道。

最佳答案

相对简单的解决方案是直接检测组合而不阻塞这两个键的输入。一旦它检测到两个键都被按下,通过发送 backspace 键 2 次删除输入结果,然后运行所需的命令。这样做的好处是您仍然可以毫无问题地键入文本。
OTOH 它仅在当前焦点位于文本输入应用程序/小部件上并且 backspace 表示删除最后一个字符的情况下才能正常工作。在其他情况下,您可能会得到一些惊喜,例如激活随机命令。
这是一个示例,我在这里使用了 xc 键。命令触发的地方是 send {O} 行。

#NoEnv  ; Recommended for performance and compatibility with future AutoHotkey releases.
SendMode Input ; Recommended for new scripts due to its superior speed and reliability.

dt := 30 ; milliseconds sleep
k1name := "x" ; key 1
k2name := "c" ; key 2

loop
{
sleep %dt% ; sleep to reduce CPU usage
k1 := getkeystate(k1name, "P") ; get key 1 state
k2 := getkeystate(k2name, "P") ; get key 2 state

if ( ! ( getkeystate("Ctrl", "P") || getkeystate("Alt", "P") || getkeystate("Shift", "P") ) ) {
if ( k1 && k2 && !trig ) {
send {backspace 2}
send {O} ; send some command
trig := 1 ; set flag to avoid repetition
}
if ( !k1 || !k2 ) {
trig := 0
}
}
}

也可以有覆盖这些键行为的解决方案,但这会更复杂,并且有评论中已经提到的问题。由于其简单性,我个人倾向于坚持使用上述解决方案。

关于autohotkey - 如何检测自动热键中同时按下两个键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56390948/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com