1

Тема: AHK: Поочередное выполнение действий, по нажатию одной клавиши.

Делая интересную программу, я столкнулся с проблемой: мне нужно, что бы по нажатию одной и той же клавиши выполнялись следующие действия;
То есть, я нажимаю F4 выполняется первое действие, еще раз, второе. Нажав F4 третий раз действие выполняется, и отсчет начинается заново.

F4::

One:  MsgBox, 1 ; первое нажатие
return
Two: MsgBox, 2 ; второе нажатие
return
Free: MsgBox, 3 ; третье нажатие

F5:: 
; заново начать отсчет

Кодить я начал недавно, надеюсь на понимание

2

Re: AHK: Поочередное выполнение действий, по нажатию одной клавиши.

Вам потребуется переменная, в которой будет храниться состояние выполнения, а именно текущий этап и логическая конструкция("if", или "switch"), которая в зависимости от номера текущего этапа будет выполнять свой блок инструкций.

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

3

Re: AHK: Поочередное выполнение действий, по нажатию одной клавиши.

KusochekDobra пишет:

Вам потребуется переменная, в которой будет храниться состояние выполнения, а именно текущий этап и логическая конструкция("if", или "switch"), которая в зависимости от номера текущего этапа будет выполнять свой блок инструкций.

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

Я понимаю, но не знаю как это в коде выразить

4

Re: AHK: Поочередное выполнение действий, по нажатию одной клавиши.

А точки в конце предложений, Вы, умеете ставить?
Если внимательно почитать справку, решение придёт само-собой.
Вот Вам, псевдокод, опираясь на который и читая мануал, к Вам должно прийти озарение:

#NoEnv
#SingleInstance, Force

; В самом начале сценария объявляете переменную счётчика
; и присваиеваете ей значение, равное единице

; Затем, объявляете блок кода, за который отвечает горячая клавиша.
; Это Вы уже делали:
F4::
	; Теперь, внутри этого блока, размещаете логическую конструкцию,
	; о которой Вы, несомненно прочли, например "if" и передаёте её оператору,
	; операнд, в виде переменной, которую вы объявили в самом начале, над которым
	; выполняете сравнение, как в примерах из справки, сравнивая с единицей.
	
		; Далее, внутри фигурных скобок размещаете инструкции, которые должны выполняться.
	
	; Затем, описываете следующее сравнение, но уже с двойкой
		
		; И внутри фигурных скобок следующего блока, размещаете инструкции для второго этапа.
		
	; Повторяете описание сравнений до тех пор, пока у Вас есть что выполнять, в Вашей
	; последовательности.
	
	; Описываете новую логическую конструкцию "if" и передаёте её оператору эту же
	; самую переменную. Сравниваете её с числом, равным количеству всех этапов,
	; которые должны выполниться.
	
		; Присваиваете переменной значение, равное единице.
		
	; Иначе
		
		; Прибавляете переменной единицу.
	
Return

5 (изменено: EV, 2020-05-11 05:33:27)

Re: AHK: Поочередное выполнение действий, по нажатию одной клавиши.

Там пару строчек кода. Выключайте вахтера.

#UseHook
1:: Gosub % "One" (I := !I || I = 3 ? 1 : ++I)

One1:
	SendInput, {2}{3}
	return
One2:
	SendInput, {4}{5}
	return
One3:
	SendInput, {6}{7}
	return

6

Re: AHK: Поочередное выполнение действий, по нажатию одной клавиши.

1) Зачем тут #UseHook?
2) Обрамлять цифры скобками не нужно.