Вопрос по переменным и автозамене Topic is solved

Помощь в написании скриптов
Gravity
Posts: 9
Joined: 22 Oct 2021, 16:57

Вопрос по переменным и автозамене

Post by Gravity » 27 Nov 2021, 16:40

Если я напишу вот так

Code: Select all

Var: 
Send ihateyou
return
!1::
Goto var
return
То я через Goto смогу найти переменную где бы она не была, но если я делаю так:

Code: Select all

Var:= ihateyou
!1::
Send %var%
return
Переменную не видит и считает пустой пока её не поместишь внутрь нужного кода и обязательно над строкой Send, я не понимаю этой логики, как мне вытащить содержимое переменной вне кода? Пытался сделать глобальной но не понял как. Мне нужно чтобы переменные были всегда в самом начале файла сгруппированы для быстрого и удобного редактирования каждой переменной а потом шёл сам код, который использует их содержимое. Пока использую в качестве переменных автозамену, но минус в том что не всегда стирает заменяемую аббревиатуру полностью и после автозамены часть аббревиатуры остаётся в конце строки, не знаю с чем это связано. Пробовал установить задержку нажатия для автозамены

Code: Select all

:K1:ihu:: ihateyou
Но какое значение я бы не поставил, скорость не меняется

mcl
Posts: 356
Joined: 04 May 2018, 16:35

Re: Вопрос по переменным и автозамене  Topic is solved

Post by mcl » 28 Nov 2021, 00:22

Ваш код присваивает переменной Var значение другой, необъявленной и следовательно пустой, переменной ihateyou.
Используйте либо старый синтаксис (только знак равно, без двоеточия):

Code: Select all

Var = ihateyou
Либо новый (двоеточие-равно, текст в двойных кавычках, рекомендуется):

Code: Select all

Var := "ihateyou"
P.S. Задержка всего в 1мс вряд ли принесёт какой-то эффект, к тому же на режим SendMode Input, стоящий по умолчанию, она вообще не влияет. Начните :K80SE:ihu::i hate you и уменьшайте задержку шагами по 5-10 мс.
github://oGDIp - GDI+ wrapper for AHK v1.1

Gravity
Posts: 9
Joined: 22 Oct 2021, 16:57

Re: Вопрос по переменным и автозамене

Post by Gravity » 28 Nov 2021, 06:39

@mcl
Пробовал все варианты для переменной, находит только когда она в самом верху, если над ней например строка автозамены то уже не видит, меня это сейчас устраивает, но хочу на будущее узнать как это работает и можно ли её разместить например под кодом или между ними

mcl
Posts: 356
Joined: 04 May 2018, 16:35

Re: Вопрос по переменным и автозамене

Post by mcl » 28 Nov 2021, 16:24

Gravity wrote: если над ней например строка автозамены то уже не видит
В документации сказано примерно следующее:
«После запуска скрипта, он начнёт выполняться с верхней строки, пока не встретится Return, Exit, метка хоткея/автозамены или пока не дойдёт до конца скрипта. Эта часть скрипта называется автоисполняемой (auto-execute section)».

Присвоение переменной значения − по сути такая же команда, как и, например, MsgBox. Если команда не выполнилась − значение переменной не присвоится.

Ниже небольшой пример. Обратите внимание, что директива #Warn будет ругаться при запуске на пункты 5 и 7 как недостижимый для выполнения код.

Code: Select all

#Warn Unreachable

myVar1 := "Ok"               ; Выполнится при запуске
MsgBox, myVar1 = %myVar1%    ; 

myVar2 := "Ok"               ; Выполнится при запуске
MsgBox, myVar2 = %myVar2%    ; 

myLabel:                     ; Label-метка не мешает коду выполняться дальше
  myVar3 := "Ok"             ; Выполнится при запуске
  MsgBox, myVar3 = %myVar3%  ; 

^1::                         ; Хоткей-метка - код дальше не выполнится.
  myVar4 := "Ok, hotkey"     ; Код выполнится только при нажатии хоткея.
  MsgBox myVar4 = %myVar4%   ; 
  Return                     ; 

myVar5 := "NotOk"            ; Этот код не выполнится никогда
MsgBox, myVar5 = %myVar5%    ; 

^2::                         ; 
  myVar6 := "Ok, hotkey"     ; 
  MsgBox myVar6 = %myVar6%   ; 
  Return                     ; 

myVar7 := "NotOk"            ; Этот код не выполнится никогда
MsgBox, myVar7 = %myVar7%    ; 

P.S. Любая переменная вне функции уже является глобальной. Их нужно специально обозначать только внутри функций.

Code: Select all

myVar := 1

^1::
	MsgBox, myVar = %myVar%
	myVar++
	myFunc()


myFunc() {
	; Global myVar
	MsgBox, @myFunc: myVar = %myVar%
}
github://oGDIp - GDI+ wrapper for AHK v1.1

Gravity
Posts: 9
Joined: 22 Oct 2021, 16:57

Re: Вопрос по переменным и автозамене

Post by Gravity » 29 Nov 2021, 09:41

@mcl
Большое спасибо за ваши разъяснения)

Post Reply

Return to “Помощь”