1 (изменено: sirusianin, 2026-01-08 03:02:14)

Тема: AHK: Отключение при отжатии модификаторов shift, alt, ctrl в скрипте

Доброго времени суток. Купил у человека скрипт для игры. Функционал простой, он спамит зажатую мной кнопку. Почти сразу столкнулся с проблемой, при использовании модификаторов. Зажимаю кнопку 1, идет заспам, зажимаю 2 не отпуская 1, скрипт переключается и идет заспам 2, отпускаю 2, возвращается спам 1. Но если жать shift+1 и отпустить shift чуть раньше 1, то скрипт начинает спамить 1, и это полностью ломает смысл использования. Обратился к человеку, он сказал, что это работает так и никак иначе. Возможно ли сделать так, чтобы при отпускании shift, alt, ctrl кнопка в сочетании с которой они были нажаты не начинала заспам, а скрипт останавливался, до новой команды?

#InstallKeybdHook
#InstallMouseHook

isInUse = 0
delay = 80

RepeatPress( key ) {
	global isInUse
	global delay

	loop {
		if not GetKeyState( key, "P" ){
			break
		}

		if not isInUse  {
			Send, {%key%}
		}

		sleep delay
	}
	return
}

RepeatPressCtrl( key ){
	global isInUse = 1
	global delay

	loop {
		if not GetKeyState( key, "P" ) {
			isInUse = 0
			break
		}

		if GetKeyState( "Ctrl", "P" ) {
			Send, ^{%key%}
		}

		sleep delay
	}
	return
}

RepeatPressShift( key ) {
	global isInUse = 1
	global delay

	loop {
		if not GetKeyState( key, "P" ) {
			isInUse = 0
			break
		}

		if GetKeyState( "Shift", "P" ){
			Send, +{%key%}
		}

		sleep delay
	}
	return
}

RepeatPressBlind( key, special_delay ) {
	global delay
	
	loop {
		if not GetKeyState( key, "P" ) {
			break
		}

		Send, {Blind}{%key%}
		;sleep delay
		sleep special_delay
	}
	return
}

RepeatPressRedirect( holdKey, sendKey ) {
	global delay
	
	loop {
		if not GetKeyState( holdKey, "P" ) {
			break
		}

		Send, {Blind}{%sendKey%}
		sleep delay
	}
	return
}


#IfWinActive, World of Warcraft
~Enter::Suspend
#IfWinActive

*Pause::Suspend
;~Enter::Suspend


F1::RepeatPressBlind( "F1", delay )
F2::RepeatPressBlind( "F2", delay )
F3::RepeatPressBlind( "F3", delay )
F4::RepeatPressBlind( "F4", delay )
F5::RepeatPressBlind( "F5", delay )
F6::RepeatPressBlind( "F6", delay )
F7::RepeatPressBlind( "F7", delay )
F8::RepeatPressBlind( "F8", delay )

*1::RepeatPressBlind( "1", delay )
*2::RepeatPressBlind( "2", delay )
*3::RepeatPressBlind( "3", delay )
*4::RepeatPressBlind( "4", 10 )
*5::RepeatPressBlind( "5", delay )
*6::RepeatPressBlind( "6", delay )
*7::RepeatPressBlind( "7", delay )
; *8::RepeatPressBlind( "8", delay )
; *9::RepeatPressBlind( "9", delay )
; *0::RepeatPressBlind( "0", delay )

*q::RepeatPressBlind( "q", delay )
; *s::RepeatPressBlind( "s", delay )
*e::RepeatPressBlind( "e", delay )

*r::RepeatPressBlind( "r", delay )
*t::RepeatPressBlind( "t", 160 )
*y::RepeatPressBlind( "y", delay )

*f::RepeatPressBlind( "f", delay )
*g::RepeatPressBlind( "g", delay )
*h::RepeatPressBlind( "h", delay )

*z::RepeatPressBlind( "z", delay )
*x::RepeatPressBlind( "x", delay )
*c::RepeatPressBlind( "c", delay )
*v::RepeatPressBlind( "v", delay )
*b::RepeatPressBlind( "b", delay )
; *n::RepeatPressBlind( "n", delay )

2

Re: AHK: Отключение при отжатии модификаторов shift, alt, ctrl в скрипте

Сам разобрался, спасибо нейросетке, ахренительная штука, всем советую.