Тема: AHK: беспрестанно посылает клавишу, даже если клавиша-ключ не нажата
Здравствуйте! Для начала, прикладываю скрипты, в которых наблюдается хрень. Скрипт №1 и скрипт №2.
Скрипт №1:
#SingleInstance force
#InstallKeybdHook
#NoEnv
SetTimer, wr
return
wr:
WinGet, pname, ProcessName, A
if pname = emacs.exe
{
a::b
b::a
}
else
{
m::n
n::m
}
return
c::d
d::c
Скрипт №2:
#SingleInstance force
#InstallKeybdHook
#NoEnv
SetTimer, wr
return
wr:
WinGet, pname, ProcessName, A
if pname = emacs.exe
{
a::
{
send, {b}
}
b::
{
send, {a}
}
}
else
{
m::
{
send, {n}
}
n::
{
send, {m}
}
}
return
c::
{
send, {d}
}
d::
{
send, {c}
}
Как видно из скриптов, а они предельно простые, задача стоит такая:
1. Если запущен Emacs, то: а) при нажатии a, должно посылаться b, б) при нажатии b, должно посылаться a.
2. Если Emacs не запущен, то: а) при нажатии m, должно посылаться n, б) при нажатии n должно посылаться m.
3. И всегда, пока скрипт запущен, независимо от того, является ли окно Emacs активным, или нет (т. е. вне таймера): а) при нажатии c, должно посылаться d, б) при нажатии d, должно посылаться c.
Не ищите практического смысла в этом скрипте - он мне нужен как проверка перед написанием более сложного. И хорошо, что я решил сделать такой проверочный скрипт, т. к. проверка не прошла. Скрипт не ведёт себя как ожидается.
А именно - он всё время непрерывно посылает n, словно я зажал клавишу m. Например, если перевести фокус на рабочий стол и переключить на инглиш, то начинают миганть все иконки, начинающиеся на n (в т. ч. на прописную). А если перевести фокус на Блокнот, то в нём начинают печататься буквы n в английской раскладке и т в русской. В Emacs-e он печатает (но непрерывно, а только когда нажимаешь!) и a вместо b, и b вместо a. И также m вместо n, и n вместо m. Т. е. как будто обе ветки (условная тру и else работают одновременно). И что особенно удивительно - даже если приостановить действие скрипта (suspend hotkeys)!!! Прекращается это только при полном выходе из скрипта.
Вот как так-то?! Всё ж предельно просто, уж куда проще, где тут можно ошибиться?