1

Тема: AHK: Вынесение части скрипта в отдельную процедуру

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


s := 0

vk6A::
s:=1
mainscript()
Return

vk6B::
s:=2
mainscript()
Return

mainscript()
{
 global s

 If s = 1
  {
  }
 if s=2
  {
  }
 Return
}

2

Re: AHK: Вынесение части скрипта в отдельную процедуру

Больше конкретных данных, объединение кода в принципе возможна.

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

3

Re: AHK: Вынесение части скрипта в отдельную процедуру

#Include

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

4

Re: AHK: Вынесение части скрипта в отдельную процедуру

#Include насколько я знаю позволяет подключить внешний скрипт, что не совсем подходит для данной цели.
У меня есть два хоткея, по которым выполняются очень похожие скрипты с небольшими отличиями. Собственно я хотел вместо двух скриптов использовать один а хоткеями задавать переменные-признаки по которому пути идти. Только не знаю правильный синтаксис данной процедуры.

5

Re: AHK: Вынесение части скрипта в отдельную процедуру

ralorttal пишет:

#Include насколько я знаю позволяет подключить внешний скрипт, что не совсем подходит для данной цели.
У меня есть два хоткея, по которым выполняются очень похожие скрипты с небольшими отличиями.

Скрипт — это отдельный ahk файл, именно внешний.

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

6

Re: AHK: Вынесение части скрипта в отдельную процедуру

Я в примере примерно обрисовал идею, того что надо два хоткея vk6a и vk6b, задают переменную s, а mainscript это общее тело скрипта в котором будут учитываться что именно было выбрано. Собственно сейчас компилятор ругается на такой синтаксис, интересует как это оформить правильно.

7

Re: AHK: Вынесение части скрипта в отдельную процедуру

ralorttal пишет:

Собственно сейчас компилятор ругается на такой синтаксис

Если точно так, как в первом посте, то не ругается.

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

8

Re: AHK: Вынесение части скрипта в отдельную процедуру

Да мой косяк, у меня в скрипте используются динамически заданные клавиши хоткеев, думал проблема не в них, а оказывается в них при замене конструкции на:


s := 0
key1 := vk6a
key2 := vk6d



Hotkey, %Key1%, Key11
Key11()
{
 s=1
 ToolTip, Нажат vk6a, 182, 18  
 Sleep 2000
 mainscript()
 Return
}

Hotkey, %Key2%, Key22
Key22()
{
 s=2
 ToolTip, Нажат vk6d, 182, 18  
 Sleep 2000
 mainscript()
 Return
}

mainscript()
{
 global s
 
 Sleep 1000
 if s=1
   ToolTip, S=1, 182, 18  
 if s=2
   ToolTip, S=2, 182, 18  

  Sleep 3000
Return
}

Начинает ругаться. Значения клавиш считываются из ини-файла в реальности, а не заданы как тут в теле скрипта. В данном случае возможен ли вызов процедуру из под динамического хоткея?

9

Re: AHK: Вынесение части скрипта в отдельную процедуру

Извините разобрался, проблема оказалась в другом. Метод рабочий.

10

Re: AHK: Вынесение части скрипта в отдельную процедуру

Хоткеи это строка, этот код не верен:

key1 := vk6a
key2 := vk6d

Нужно так указывать в скрипте:

key1 := "vk6a"
key2 := "vk6d"
Win10x64, AHK v1.1.37.01 (Unicode 64-bit) | AHK-Wiki | Переменные и выражения | RegEx101