1 (изменено: wolf_107, 2019-07-23 13:49:46)

Тема: АНК: каким условием отслеживать нажатие комбинации клавиш?

В скрипте

vk53::
send {vk31 down}
Sleep, 100
send {vk31 up}
If !GetKeyState(A_ThisHotkey, "P")
Return
Sleep, 100
send {vk32 down}
Sleep, 100
send {vk32 up}
If !GetKeyState(A_ThisHotkey, "P")
Return 
send {vk33 down}
Sleep, 100
send {vk33 up}
Sleep, 100
If !GetKeyState(A_ThisHotkey, "P")
Return 
send {vk34 down}
Sleep, 100
send {vk34 up}
If !GetKeyState(A_ThisHotkey, "P")
Return 
Sleep, 100
send {vk35 down}
Sleep, 100
send {vk35 up}
If !GetKeyState(A_ThisHotkey, "P")
Return 
send {vk36 down}
Sleep, 100
send {vk36 up}
Sleep, 100
If !GetKeyState(A_ThisHotkey, "P")
Return

If !GetKeyState(A_ThisHotkey, "P") отслеживает нажата ли vk53. Если не нажата то скрипт прекращается.
Как сделать такое же условие если скрипт будет запускаться через vk53 & vk44::  ?
Как правильно переписать команду If !GetKeyState(A_ThisHotkey, "P") чтобы отслеживалось нажата ли комбинация vk53 & vk44 ?

vk53 & vk44::
send {vk31 down}
Sleep, 100
send {vk31 up}
If !GetKeyState(A_ThisHotkey, "P")
Return
Sleep, 100
send {vk32 down}
Sleep, 100
send {vk32 up}
If !GetKeyState(A_ThisHotkey, "P")
Return 
send {vk33 down}
Sleep, 100
send {vk33 up}
Sleep, 100
If !GetKeyState(A_ThisHotkey, "P")
Return 
send {vk34 down}
Sleep, 100
send {vk34 up}
If !GetKeyState(A_ThisHotkey, "P")
Return 
Sleep, 100
send {vk35 down}
Sleep, 100
send {vk35 up}
If !GetKeyState(A_ThisHotkey, "P")
Return 
send {vk36 down}
Sleep, 100
send {vk36 up}
Sleep, 100
If !GetKeyState(A_ThisHotkey, "P")
Return

2

Re: АНК: каким условием отслеживать нажатие комбинации клавиш?

wolf_107
1. Выполните требования по исправлению ошибок в этой теме.
2. Код оформляется тегом code, а не прячется под спойлер. Исправьте ошибку.

Кроме того я рекомендую вам ознакомится с полной версией правил форума, либо с выпиской важнейших правил поведения на форуме чтобы избежать подобных ошибок в будущем.

Если вы нашли решение своей проблемы, то это не значит, что можно не соблюдать обоснованные требования по исправлению недостатков в оформлении тем. Учтите, что наплевательское отношение к правилам форума не только не приветствуется со стороны местного комьюнити, но и может повлечь за собой более жесткие дисциплинарные меры, вплоть до полного ограничения доступа к форуму. Пожалуйста отнеситесь к соблюдению правил серьезно, от вас не требуют чего-то сверхъестественного.

Обсуждение в теме временно прекращено.
Пока оформление не будет приведено в порядок, ответы будут удаляться. Если в течение трех суток тема не будет оформлена должным образом, то будет удалена.

UPD: Обсуждение может быть продолжено.

Когда вы говорите что не можете сделать, вам всего-лишь не хватает фантазии придумать какой-нибудь костыль.

3

Re: АНК: каким условием отслеживать нажатие комбинации клавиш?

Loop {
	ToolTip, "123"
	if getkeystate("vk53", "P") and getkeystate("vk44", "P") {
		break
	}
}

Справедливости ради стоит отметить что комбинация d + s так же остановит скрипт.

Когда вы говорите что не можете сделать, вам всего-лишь не хватает фантазии придумать какой-нибудь костыль.

4

Re: АНК: каким условием отслеживать нажатие комбинации клавиш?

#MaxHotkeysPerInterval 300
s::
	buttn := 0
	SetKeyDelay,, 100
	While GetKeyState("s")
		send % "{Blind}" buttn:=Mod(buttn, 6)+1
Return
Win7x64 up to 2018, AutoHotkey 1.1.30.00

5

Re: АНК: каким условием отслеживать нажатие комбинации клавиш?

Спасибо за ответы. От belyankin12 методом тыка понял что в строке  if getkeystate через кавычки можно указать клавишу которая будет отслеживаться. Stealzy вписал прибавление по +1 до значения =6 это не совсем в тему. Любопытно конечно, но я пытаюсь понять простейшие принципы скриптов запускаемых сочетанием клавиш.
Тема в разделе Games. Я пытаюсь написать команды для автоматического набора комбо в файтинге. Очень важны тайминги между нажатиями (Sleep,). Мне нужен удобный функционал чтобы скрипт можно было прервать в любой момент и запуск скрипта сочетанием двух клавиш. Есть ли функция которая реагирует только на отпускание одной из кнопок которыми скрипт запускается? Чтобы запуск vk33 & vk34:: и условие что-то вроде "if send {vk33 up} then return".
Можно конечно сделать как в коде ниже. Любое нажатие vk20 остановит скрипт. Но с отдельной кнопкой остановки не очень удобно.

vk10 & vk53::
send {vk31 down}
Sleep, 100
if getkeystate("vk20", "P")
Return
send {vk31 up}
if getkeystate("vk20", "P")
Return
Sleep, 100
if getkeystate("vk20", "P")
Return
send {vk32 down}
Sleep, 100
if getkeystate("vk20", "P")
Return
send {vk32 up}
if getkeystate("vk20", "P")
Return 

6

Re: АНК: каким условием отслеживать нажатие комбинации клавиш?

vk10 & vk53::
send {vk31 down}
Sleep, 100
if !getkeystate("vk10", "P") and !getkeystate("vk53", "P")
Return
send {vk31 up}
if !getkeystate("vk10", "P") and !getkeystate("vk53", "P")
Return
Sleep, 100
if !getkeystate("vk10", "P") and !getkeystate("vk53", "P")
Return
send {vk32 down}
Sleep, 100
if !getkeystate("vk10", "P") and !getkeystate("vk53", "P")
Return
send {vk32 up}
if !getkeystate("vk10", "P") and !getkeystate("vk53", "P")
Return 
send {vk33 down}
Sleep, 100
if !getkeystate("vk10", "P") and !getkeystate("vk53", "P")
Return
send {vk33 up}
Sleep, 100
if !getkeystate("vk10", "P") and !getkeystate("vk53", "P")
Return 

Вот так вроде работает как надо. Начинаю понимать. Спасибо.

Еще вопрос:
А как разделить алгоритмы для разных горячих клавиш в одном файле?

vk10 & vk53::
send {vk31 down}
Sleep, 100
if !getkeystate("vk10", "P") and !getkeystate("vk53", "P")
Return
send {vk31 up}
if !getkeystate("vk10", "P") and !getkeystate("vk53", "P")
Return
Sleep, 100
if !getkeystate("vk10", "P") and !getkeystate("vk53", "P")
Return
send {vk32 down}
Sleep, 100
if !getkeystate("vk10", "P") and !getkeystate("vk53", "P")
Return
send {vk32 up}
if !getkeystate("vk10", "P") and !getkeystate("vk53", "P")
Return 
send {vk33 down}
Sleep, 100
if !getkeystate("vk10", "P") and !getkeystate("vk53", "P")
Return
send {vk33 up}
Sleep, 100
if !getkeystate("vk10", "P") and !getkeystate("vk53", "P")
Return 

vk10 & vk52::
send {vk36 down}
Sleep, 100
if !getkeystate("vk10", "P") and !getkeystate("vk52", "P")
Return
send {vk36 up}
if !getkeystate("vk10", "P") and !getkeystate("vk52", "P")
Return
Sleep, 100
if !getkeystate("vk10", "P") and !getkeystate("vk52", "P")
Return
send {vk37 down}
Sleep, 100
if !getkeystate("vk10", "P") and !getkeystate("vk52", "P")
Return
send {vk37 up}
if !getkeystate("vk10", "P") and !getkeystate("vk52", "P")
Return 
send {vk38 down}
Sleep, 100
if !getkeystate("vk10", "P") and !getkeystate("vk52", "P")
Return
send {vk38 up}
Sleep, 100
if !getkeystate("vk10", "P") and !getkeystate("vk52", "P")
Return 

Если запустить верхний алгоритм с vk10 & vk53:: то следом воспроизводится второй с vk10 & vk52:: Как этого избежать.

7

Re: АНК: каким условием отслеживать нажатие комбинации клавиш?

Вам нужно поставить ещё один return. Ваши возвраты вложены в условия, а вот возврата от активации хоткеем нет, потому и скрипт запускает все подряд. Кстати может-быть так будет лучше:

vk10 & vk53::
while (getkeystate("vk53", "P") or getkeystate("vk10", "P")) {
	send {vk31 down}
	Sleep, 100
	send {vk31 up}
	Sleep, 100
	send {vk32 down}
	Sleep, 100
	send {vk32 up}
	send {vk33 down}
	Sleep, 100
	send {vk33 up}
	Sleep, 100
}
return

Если оставить or то для остановки подпрограммы нужно будет опустить обе клавиши. Если поставить and то нужно будет отпустить всего одну клавишу.

Когда вы говорите что не можете сделать, вам всего-лишь не хватает фантазии придумать какой-нибудь костыль.

8

Re: АНК: каким условием отслеживать нажатие комбинации клавиш?

stealzy пишет:

вписал прибавление по +1 до значения =6 это не совсем в тему

Сразу понятно, что не запускали. Вы запустите и расскажите чем это отличается от простыни в вашем первом сообщении. Тайминг там выставлен, кстати.

Во многих случаях нужны совершенно разные значения sleep чтобы игра правильно считала и сбуферила всё это в комбо. Методом тыка я разобрался

vkA0 & vk44::                      ;низ 240 dm
send {vk20 up}
send {vk41 down}
Sleep, 19
send {vk64 down}
Sleep, 70
send {vk41 up}
Sleep, 10
send {vk64 up}
if !getkeystate("vk44", "P") and !getkeystate("vk10", "P")
Return
Sleep, 70
send {vk57 down}
Sleep, 15
send {vk65 down}
Sleep, 70
send {vk57 up}
Sleep, 20
send {vk65 up}
if !getkeystate("vk44", "P") and !getkeystate("vk10", "P")
Return
Sleep, 100
send {vk41 down}
Sleep, 70
send {vk41 up}
if !getkeystate("vk44", "P") and !getkeystate("vk10", "P")
Return
Sleep, 70
send {vk44 down}
Sleep, 19
send {vk68 down}
Sleep, 70
send {vk44 up}
Sleep, 10
send {vk68 up}
if !getkeystate("vk44", "P") and !getkeystate("vk10", "P")
Return
Sleep, 800
Return

Вот как-то в таком виде это работает как мне нужно. Всем спасибо. Помогли.