Относительно простое решение состоит в том, чтобы обнаружить комбо напрямую, не блокируя ввод для этих двух клавиш. Как только он обнаружит, что нажаты обе клавиши, удалите результаты ввода, дважды нажав клавишу backspace
, а затем выполните нужную команду. Преимущество этого заключается в том, что вы все равно можете набирать текст без проблем.
OTOH это будет работать правильно только в случае, когда текущий фокус находится на приложении / виджете для ввода текста и где backspace
означает удаление последнего символа. В других случаях вы можете получить некоторые сюрпризы, например, активация случайных команд.
Вот пример, я использовал клавиши x
и c
здесь. Место, где запускается команда - это линия 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
}
}
}
Могут также быть решения с переопределением поведения этих клавиш, но это будет более сложным и имеет проблемы, уже упомянутые в комментариях. Я лично склонен придерживаться вышеуказанного решения из-за его простоты.