1

Тема: AHK: Проблема с ненужным зажатием клавиши.

Добрый вечер. У меня возникла проблема с тем, что при выполнении скрипта, когда я иду в игре, т.е. нажимаю W, S, A, D, после завершения цикла скрипта, продолжает быть зажатой та клавиша, которую я нажимал при активном цикле скрипта.

Сам код:

#NoEnv
#SingleInstance, Force
#MaxThreadsPerHotKey, 2
#MaxHotkeysPerInterval, 200
Process, Priority,, High
SetBatchLines, -1
SendMode, Play
SetKeyDelay, 30

on = 1

*F1::on := !on

#If on

*$LButton::
While GetKeyState("LButton", "P")
{
	Send, 3
	While (GetKeyState("LButton", "P") and a_index<=1)
	{
		Send, {Blind}{RButton}
		Sleep, 200
	}
	Send, 1
	While (GetKeyState("LButton", "P") and a_index<=50)
	{
		Send, {Blind}{LButton}
		Random, RS, 60, 85
		Sleep, RS
	}
}
Return

#If

Конкретнее: Я иду, зажимаю ЛКМ, после отжатия ЛКМ, когда мной отжимается клавиша ходьбы, в игре она продолжает быть зажатой, то-есть, я там продолжаю идти. Если такой казус произошел, и клавиша зажата, стоит мне нажать один раз на эту клавишу, и она отжимается в игре.
Помогите решить эту проблему, пожалуйста.

2

Re: AHK: Проблема с ненужным зажатием клавиши.

Может легче будет нажать кнопку и скрипт будет выполнять действия, а повторное нажатие остановит? Зачем постоянно зажимать ЛКМ?
Возможно в игре драйвер перехвата клавиш конфликтует с АХК или ещё какие подводные камни.

Win10x64, AHK v1.1.33.09 (Unicode 64-bit) | AHK-Wiki | Переменные и выражения | RegEx101

3 (изменено: deadskiy sad, 2021-04-30 23:14:54)

Re: AHK: Проблема с ненужным зажатием клавиши.

__Михаил__ , насчет toggle, вместо зажима, вы меня убедили .
Сделал. Пока был присвоен SendMode Play, были такие зависания клавиш, но когда изменил на Input, стало работать нормально, без зажиманий. Кстати, забыл упомянуть, в скрипте из первого поста, когда он был в действии в игре, при передвижении мыши мной были непонятные рывки, игровой курсор двигался с лагами, но Input тоже убрал эту проблему.

#NoEnv
#SingleInstance, Force
#MaxThreadsPerHotKey, 2
#MaxHotkeysPerInterval, 200
Process, Priority,, High
SetBatchLines, -1
SendMode, Input
SetKeyDelay, 30
Toggle := 0
on = 1

*F1::on := !on

#If on

*XButton1::
Toggle := !Toggle
While Toggle 
{
	Send, {3}
	While (Toggle and a_index<=1)
	{
		Send, {Blind}{RButton}
		Sleep, 200
	}
	Send, {1}
	While (Toggle and a_index<=50)
	{
		Send, {Blind}{LButton}
		Random, RS, 60, 85
		Sleep, RS
	}
}
Return

#If

Вот протестировал полчаса, без нареканий.