Тема: AHK: ControlSend перестает отправлять нажатия клавиш (залипают).
Здравствуйте.
Есть небольшой цикл. Ищет определенный цвет в области экрана, если нашел - посылает в игру нажатие F1, если не нашел - посылает нажатие F2. Игра в окне на втором мониторе, окно неактивно, поэтому использую ControlSend, ahk_id предварительно узнаю и вставляю в значение переменной. Сам соответственно что-то делаю на основном мониторе.
Есть 2 проблемы:
1) Залипание Shift при работе скрипта - набираю текст на основном мониторе в ворд/браузере/почте, и периодически то большая буква выскочит, то вместо запятой точка, то между шрифтами не переключается (как будто шифт кто-то периодически жамкает, хотя в скрипте нет нажатия шифта).
2) При запуске скрипта всё работает, но через какое-то время перестают посылаться нажатия то F1 то F2 в игру. Когда произойдет сбой - непонятно, то несколько часов всё работает, то каждую минуту "затупливает". Перезапуск скрипта - не помогает. НО если нажму эту зависшую клавишу (F1 или F2) физически, при этом не важно в окне игры нажимаю или просто в любом другом, то в игре скрипт снова начинает работать и отправлять нажатия F1/F2, т.е. как будто клавиши программно "залипают" и физическое нажатие их "разлипает". Думал, что это из-за того, что параллельно нажимаю кнопки на клавиатуре при работе, но даже если клаву не трогаю, то всё равно игра может перестать реагировать на F1 или F2, и опять же при их физическом нажатии на клавиатуре - снова всё начинает работать.
Почитал темы: пробовал увеличить задержки с помощью SetKeyDelay; поставить {blind} перед {F1}; посылать отдельно {F1 down} и {F1 up} с разными задержками между событиями через sleep; дополнительно посылать {F1 up} в разные моменты скрипта - проблема с "залипанием" клавиш так и остается.
Скрипт ниже, версия AHk 1.1.37.01
Numpad3::
global Gam := 0x504a2
loop
{
CoordMode, Pixel, Screen
PixelSearch, FoundX, FoundY, 508, 148, 584, 167, 0x881C18, 0, Fast RGB
If (ErrorLevel = 0)
ControlSend,, {F1}, ahk_id %Gam%
else ControlSend,, {F2}, ahk_id %Gam%
sleep, 2000
}
return
numpad2::Pause