1 (изменено: Eio, 2020-04-20 01:25:53)

Тема: AHK: Зажатие клавиш с alt shift ctrl

Здравствуйте.
Нужен скрипт который бы при нажатии на кнопку(1-2-3-...) спамил ее, но при зажатом альте с цифрами спамил бы альт+1, альт+2,альт+3...


loop
{
if GetKeyState("vk31")
{
Send, {vk31}
}
if GetKeyState("vk32")
{
Send, {vk32}
}
if GetKeyState("vk33")
{
Send, {vk33}
}
if GetKeyState("vk34")
{
Send, {vk34}
}
if GetKeyState("vk35")
{
Send, {vk35}
}
}

При таком коде он, прекрасно спамит зажатые кнопки 1-5, но когда я нажимаю альт+1 в большинстве случаев он продолжает спамить "1"  игнорируя то умение в игре, что стоит на "альт+1",
что практически полностью  перечеркивает всю пользу его использования. Как я понял без дополнительных манипуляций он откликается на альт+1 только если они были нажаты одновременно. А мне желательно чтоб альт+1 работало при зажатом альте когда я нажму "1".

2

Re: AHK: Зажатие клавиш с alt shift ctrl

Если верить текстовым редакторам, то у меня спам кнопок происходит и без скриптов, если кнопку нажать и не отпускать.
Ваш пример, в котором, в бесконечном цикле проверяется нажата ли некоторая кнопка из набора не подразумевает нажатия кнопок вместе с кнопками-модификаторами. Чтобы это стало происходить, нужно добавить ещё одно проверяемое условие — нажата ли кнопка-модификатор и, соответственно, посылать её в комбинации. Например, с участием "Alt":


Loop {
	Loop 5 {
		key := "vk3" . A_Index
		if (GetKeyState(key)) {
			send_me := Format("{1}{{2}}", GetKeyState("Alt") ? "!" : "", key)
			Send %send_me%
		}
	}
}

Хоткеи — не моя "стихия", но, на мой взгляд, такая конструкция чрезмерно не эффективна. Лучше создать хоткеи для каждой кнопки и их комбинаций, например:


#MaxHotkeysPerInterval 100
Loop 5 {
	key 	  := "sc" . (1 + A_Index)
	alt_key   := Format("!{}", key)
	ctrl_key  := Format("^{}", key)
	shift_key := Format("+{}", key)
	
	send_key       := Format("{{1}}", key)
	send_alt_key   := Format("!{{1}}", key)
	send_ctrl_key  := Format("^{{1}}", key)
	send_shift_key := Format("+{{1}}", key)
	
	fn       := Func("PressButton").Bind(send_key)
	alt_fn   := Func("PressButton").Bind(send_alt_key)
	ctrl_fn  := Func("PressButton").Bind(send_ctrl_key)
	shift_fn := Func("PressButton").Bind(send_shift_key)
	
	Hotkey,% key,% fn
	Hotkey,% alt_key,% alt_fn
	Hotkey,% ctrl_key,% ctrl_fn
	Hotkey,% shift_key,% shift_fn
}

PressButton(send_me) {
	Send %send_me%
}

Здесь, динамически создаётся пять хоткеев для кнопок с 1 по 5 включительно, а так же для комбинаций кнопок модификаторов с каждой из них.

3

Re: AHK: Зажатие клавиш с alt shift ctrl

Большое спасибо, все прекрасно работает.
Но остался еще один небольшой вопрос.
Чтобы это все работало не только с  цифрами 1-5, а еще на других клавишах нам нужно loop сменить с 5 на 5+ количество дополнительных кнопок? и как вставить в "key" другие кнопочки?