1 (изменено: lolihax1, 2022-05-17 17:27:21)

Тема: AHK: Как объединить два скрипта в один?

 pause
Loop {
  Send {w}
  Sleep 25
  Send {d}
  Sleep 25
  Send {s}
  Sleep 25
  Send {a}
}
Numpad2::Pause


==================
pause
Loop {
  Send {a}
  Sleep 25
  Send {s}
  Sleep 25
  Send {d}
  Sleep 25
  Send {w}
}
Numpad1::Pause

Нужно сделать этих два скрипта в один.

2 (изменено: Foma, 2022-05-17 18:23:24)

Re: AHK: Как объединить два скрипта в один?

 pause
Label1:
Loop {
  Send {w}
  Sleep 25
  Send {d}
  Sleep 25
  Send {s}
  Sleep 25
  Send {a}
}
Return

Label2:
Loop {
  Send {a}
  Sleep 25
  Send {s}
  Sleep 25
  Send {d}
  Sleep 25
  Send {w}
}
Return

Numpad1::GoSub, Label1
Numpad2::GoSub, Label2

Numpad0::ExitApp

  Так пойдёт?

3

Re: AHK: Как объединить два скрипта в один?

Так не будет работать.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

4 (изменено: Foma, 2022-05-17 19:22:29)

Re: AHK: Как объединить два скрипта в один?

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

5

Re: AHK: Как объединить два скрипта в один?

Поменяйте символы из первого цикла на "а", из второго на "b", попереключайте несколько раз.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

6 (изменено: Foma, 2022-05-17 21:39:17)

Re: AHK: Как объединить два скрипта в один?

Я менял последние на "U" и "O", перед тем как ответить. Работает. Во время выполнения "Sleep" идёт перехват и прекрасно работает.

7

Re: AHK: Как объединить два скрипта в один?

Наверно придётся выкинуть два моих компьютера, на которых я попробовал, на помойку.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

8

Re: AHK: Как объединить два скрипта в один?

Foma
АХК не может выполнять две и более задачи одновременно таким кодом - цикл прерывается новым.
Не первый год уже программируете всё еще не запомнили?

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

9

Re: AHK: Как объединить два скрипта в один?

__Михаил__, я думаю, задача не в том, чтобы выполнять оба цикла одновременно, а в том, чтобы переключать с одного на другой по горячей клавише. Проблема кода, который выложил коллега Foma в том, что переключиться он может только один раз. Можете проверить сами, замените символы, как я советовал выше. Только не на заглавные.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

10

Re: AHK: Как объединить два скрипта в один?

e::

Loop
	{
	Send {a}
	Sleep, 100
	}

r::

Loop
	{
	Send {b}
	Sleep, 100
	}

q::Reload

Чтобы с "b" переключиться на "a", нужно нажать "q", "e". Как костыль на время поиска более изящного решения...

11

Re: AHK: Как объединить два скрипта в один?

Если уж использовать перезагрузку, то можно обойтись без нажатия лишней клавиши:

#SingleInstance, Force 

if (A_Args[1] = 0) {
   Loop
   {
      ToolTip a
      Sleep, 100
   }
}
if A_Args[1] {
   Loop
   {
      ToolTip b
      Sleep, 100
   }
}
NumPad1:: Run, % A_ScriptFullPath . " " . 0
NumPad2:: Run, % A_ScriptFullPath . " " . 1

Но я уверен, что форумчане способны придумать красивые решения без перезагрузки.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

12

Re: AHK: Как объединить два скрипта в один?

isxodnik
Перезапуск скрипта, ну да - отличный костыль. На таймеры обиделись?

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

13

Re: AHK: Как объединить два скрипта в один?

teadrinker пишет:

Проблема кода, который выложил коллега Foma в том, что переключиться он может только один раз

Проверил. Вы правы.

14

Re: AHK: Как объединить два скрипта в один?

Значит оба компа teadrinker может не выкидывать.

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

15

Re: AHK: Как объединить два скрипта в один?

Ура! А то я уже упаковал.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

16 (изменено: Vsevolod, 2022-05-20 20:19:51)

Re: AHK: Как объединить два скрипта в один?

Почему в один цикл нельзя?


mode = 0
loop {
	if (mode = 1)
		GoSub lb1
	if (mode = 2)
		GoSub lb2
}

Label1:
mode = 1
Return

Label2:
mode = 2
Return

Numpad1::GoSub, Label1
Numpad2::GoSub, Label2

lb1:
Send {a}
Sleep 100
return

lb2:
Send {b}
Sleep 100
return


Numpad0::ExitApp

17

Re: AHK: Как объединить два скрипта в один?

Хорошая идея, только меток лишних много, сделали из простого алгоритма квест.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

18

Re: AHK: Как объединить два скрипта в один?

Всё-таки можно и без таймера:

M := 0		; Режим отправки: 0:Обычный, 1:Реверс.
Keys := "wdsasdw"	; Клавиши для отправки.
I := 0		; Индекс текущей клавиши.
R := 0		; Флаг: 1:Нужно начать заново отправку клавиш.
Wait := 25	; Задержка между посылом клавиши.
Pause

Loop{
 I := (R ? 1 : (I > 3 ? 1 : I+1), R=0)
 MM := SubStr(Keys, I+(M*3),1)
 Send, {%MM%}
 Sleep, % Wait
}
Return

F2:: M := !M, R := 1	; Переключить режим: 0:Обычный, 1:Реверс.
F3:: Pause		; Приостановить / Возобновить работу скрипта.
Win10x64, AHK v1.1.37.01 (Unicode 64-bit) | AHK-Wiki | Переменные и выражения | RegEx101