1 (изменено: barbarossa, 2023-10-11 00:38:43)

Тема: 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

2 (изменено: barbarossa, 2023-10-11 00:38:59)

Re: AHK: ControlSend перестает отправлять нажатия клавиш (залипают).

Установил 2 версию AHK, скрипт поменял под нее, но обе проблемы так и остались.

Numpad3::
{
loop {
	CoordMode "Pixel", "Screen"
	If PixelSearch(&Px, &Py, 508, 148, 584, 167, 0x881C18, 3)
		ControlSend "{F1}",, "Asterios Prime"
		else
		ControlSend "{F2}",, "Asterios Prime"
	sleep (2000)
	}
return
}
numpad2::Pause