Перейти на главную страничку сайта (список статей, файлы для скачивания)

ФОРУМ (здесь можно обсудить эту статью, а также саму программу AutoHotkey и проблемы её использования)

Проект перевода документации AutoHotkey: перечень переведённых статей и статей в работе.

Оригинал статьи в AutoHotkey.chm: "Variables and Expressions", в содержании - "Variables and Expressions"

Ник переводчика: Gourmet.

Настоящее имя переводчика: Валентина Гаврикова, г.Москва.

Переменные и выражения

Введение в переменные

Переменными являются участки памяти, где хранятся значения. Значение (или строка, как его иногда называют) может представлять собой любую последовательность символов или цифр. Хотя между текстом и числами не делается никаких различий (и то и другое хранится в виде строк), в некоторых контекстах трактовка строки, полностью состоящей из чисел, отличается от трактовки других строк. Например, если в выражении InputString > BookmarkString обе переменные будут иметь числовые значения, они будут сравниваться как числа. Иначе, сравнение будет производиться в соответствии с алфавитным порядком.

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

В примере, приведенном ниже, показано, как присвоить переменной значение:

MyVar = 123abc

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

MsgBox, Значение переменной MyVar - %MyVar%.

Однако параметры некоторых команд явно определены как входные или выходные переменные. В этих случаях нет необходимости помещать переменную между знаками процента. Например, в команде StringLen, OutputVar, InputVar в начале и в конце переменных не должно быть знаков процента.

Имена переменных и функций нечувствительны к регистру. Кроме того, такие имена могут включать в себя цифры, буквы и следующие символы: # _ @ $ ? [ ] (квадратные скобки обычно используются для обозначения массивов, что впрочем, не является обязательным требованием). Имена переменных могут начинаться с цифр или даже полностью из них состоять (хотя имена, полностью состоящие из цифр, нельзя использовать в выражениях).

Замечания по поводу возможностей переменных и использования памяти:

Переменные окружения в сравнении с "обычными" переменными

Переменные окружения поддерживаются операционной системой. Их список можно посмотреть в командной строке при помощи команды SET.

Скрипт при помощи команды EnvSet может создавать новую переменную окружения или изменять содержимое уже существующих переменных. Подобные добавления и изменения являются приватными, и остальная часть системы их не видит. Однако если скрипт запускает программу (или другой скрипт) с помощью команд Run или RunWait, то эта программа наследует дубликат переменных окружения родительского скрипта, включая и приватные переменные.

Чтобы извлечь содержимое переменной окружения, сошлитесь на нее так же, как на обычную переменную. Основанием для этого является то обстоятельство, что любая ссылка на неопределенную или пустую переменную (например, %EmptyVar%) разрешается в пустую строку, если эта переменная не определена в среде (например, %ProgramFiles%).

Выражения [v1.0.25+]

Выражения нужны для выполнения операций с последовательностью переменных, буквальными строками, и/или с буквальными числами.

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

В выражении имена переменных не заключаются в знаки процента. Исключением являются массивы и другие двойные ссылки (см. таблицу ниже). В результате, для того, чтобы различать переменные и буквальные строки, последние необходимо заключать в двойные кавычки. Например:

if (CurrentSetting > 100 or FoundColor <> "Blue")
	MsgBox Слишком большое значение параметра или неверный цвет.

В примере, приведенном выше, параметр "Blue" заключен в кавычки и представляет собой слово Blue. Чтобы включить буквальные кавычки в буквальную строку, задайте две кавычки подряд, как показано в следующем примере: "Она сказала, ""Одно яблоко в день."""

Условный оператор, содержащий выражение, отличается от таких не содержащих выражений условных операторов, как

If FoundColor <> Blue
тем, что после слова if в нем стоит открывающая скобка. Хотя обычно все выражение заключается в круглые скобки, оно также может выглядеть и таким образом:
if (x < 0) and (y > 0)

Кроме того, в случае, если первый элемент после слова if является вызовом функции или оператором (например, not или !), открывающие скобки можно не ставить совсем.

Чтобы задать в выражении пустую строку, используйте пустую пару кавычек. Например, условный оператор

if (Var <> "")
вернет истину, если у переменной есть значение. Однако, если условный оператор не содержит выражений, пустые кавычки трактуются буквально. К примеру, приведенный далее условный оператор, не содержащий выражений, вернет истину, только если переменная Var действительно содержит пару кавычек:
if Var = ""
Таким образом, чтобы с помощью не содержащего выражений условного оператора проверить, есть ли у переменной значение, используйте в правой части оператора символы = или <> без указания чего-либо далее, как показано в примере:
if Var =

Если выражение недействительно (неверно), например, (x +* 3), оно выдает пустой результат (пустую строку).

Если выражение необходимо для проверки на истину или ложь (как условный оператор), пустой или нулевой результат расценивается как ложь, а все другие результаты - как истина. Например, оператор "if ItemCount" вернёт ложь, если переменная ItemCount пуста или равна 0, и истину иначе. Подобным образом выражение "if not ItemCount" даст противоположный результат.

Такие операторы, как NOT / AND / OR / > / = / <, автоматически выдают значение истина или ложь: если истина - результат 1, если ложь - 0. Например, если одно из условий в выражении Done := A_Index > 5 or FoundIt истинно, переменной Done присваивается значение 1.

Итак, как показано выше, для того, чтобы оператор всегда возвращал значение ложь, необходимо оставить значение переменной пустым или присвоить значение ноль. В практическом плане, чтобы проверить, истинно или ложно значение переменной Done, можно использовать краткий оператор "if Done".

В версиях 1.0.25.07 и выше, слова true и false являются встроенными переменными, принимающими значение 1 и 0. Их можно использовать, чтобы сделать скрипт более удобным для чтения, как показано в следующих примерах:

CaseSensitive := false
ContinueSearch := true

Чтобы присвоить результат выражения переменной, используйте оператор := , например:

NetPrice := Price * (1 - Discount/100)

Поскольку результатом приведенного примера является число с плавающей запятой, количество десятичных разрядов, сохраняемых в NetPrice, определяется командой SetFormat. SetFormat может вносить и другие изменения в свойства результатов выражения. Однако, обратите внимание, что команда AutoTrim не может влиять на результат выражения.

В версиях 1.0.29 и выше, выражение можно использовать в параметре, который напрямую его не поддерживает (исключением являются параметры OutputVar или InputVar, как в команде StringLen). Для этого поставьте перед выражением знак процента и пробел или табуляцию. Этот способ часто используется для того, чтобы получить доступ к массиву. Примеры:

FileAppend, % MyArray%i%, My File.txt
MsgBox % "Переменная MyVar содержит " MyVar "."
Loop % Iterations + 1
WinSet, Transparent, % X + 100
Control, Choose, % CurrentSelection - 1

Операторы в выражениях

Операторы с равным приоритетом, такие, как умножение (*) и деление (/), исполняются по умолчанию слева направо. Операторы с более низким приоритетом, как например, сложение (+), исполняются после них. Например, выражение 3 + 2 * 2 будет вычисляться в том же порядке, что и выражение 3 + (2 * 2). Круглые скобки можно использовать для того, чтобы изменить порядок исполнения операторов: (3 + 2) * 2.

Операторы выражений (в порядке убывания приоритета):


(Ref) Если в выражении появляется ссылка на переменную, например, %Var%, ее содержимое трактуется как имя или часть имени другой переменной (при отсутствии такой переменной, %Var% разрешается в пустую строку). Как правило, этот оператор используется для того, чтобы сослаться на элементы массива, например:
Var := MyArray%A_Index% + 100
Подобная ссылка не может разрешаться в переменную окружения, буфер обмена или любую зарезервированную / только для чтения переменную. Если это происходит, ссылка трактуется как пустая строка.
** Степень (возведение в степень). Как основание, так и показатель степени могут содержать десятичную запятую. Если показатель степени - отрицательный, результатом будет число с плавающей запятой, даже если и основание, и показатель степени являются целыми числами. Отрицательное основание, как например, (-2)**2 не поддерживается: результатом такого выражения будет пустая строка. Однако, поскольку оператор ** имеет более высокий приоритет, чем унарный минус, -2**2 возвращает -4.
-
!
~
& *
Унарный минус (-). Хотя унарный минус использует тот же символ, что и оператор вычитания, он применяется только к одиночному элементу или подвыражению: -(3 / -x). Примечание: унарные плюсы в выражении игнорируются.

Логическое НЕ (!). Если операнд пуст или равен 0, результатом применения логического НЕ является 1, что означает "истина". Иначе, результат - 0 (ложь). Например: !x or !(y and z). Примечание: слово NOT является синонимом !. Единственным отличием между ними является более высокий приоритет символа !.

Побитовое NOT (~): обращает каждый бит своего операнда. Если операнд - это значение с плавающей запятой, перед вычислением оно округляется до целого числа. Если значение операнда принадлежит диапазону от 0 до 4294967295 (0xffffffff), оно трактуется как беззнаковое 32-битное значение. Иначе, значение операнда трактуется как знаковое 64-битное значение. Например, ~0xf0f возвращает 0xfffff0f0 (4294963440).

Адресация (&) и разадресация (*) [в версиях 1.0.36.07 и выше]: выражение &MyVar возвращает адрес содержимого переменной MyVar в памяти. Выражение *MyVar, напротив, предполагает, что идентификатор MyVar ссылается на числовой адрес в памяти и извлекает байт по этому адресу как число диапазона от 0 до 255 (если адрес нулевой, всегда возвращается 0, однако другие недействительные адреса могут привести к сбою в работе скрипта). Эти редко используемые операторы полезны при работе со структурами в команде DllCall и при обработке строк, содержащих бинарные нули. Одним и примеров является функция ExtractInteger(), описанная в статье про DllCall.
*
/
//
Умножение (*): если входные данные являются целыми числами, результатом будет также целое число. Иначе - число с плавающей запятой.

Истинное деление (/): в отличие от работы команды EnvDiv (/=), результатом истинного деления является число с плавающей запятой, даже если оба входных числа являются целыми числами. Например, в результате деления 3/2 получится 1.5, а не 1.

Базовое деление (//): В версиях 1.0.34 и выше, если параметрами являются два целых числа, оператор двойного слеша осуществляет высокопроизводительное целочисленное деление. Например, 5//3 равно 1, а 5//-3 равно -1. Если одно из входящих значений вводится в формате числа с плавающей запятой, выполняется деление с плавающей запятой и результат округляется до ближайшего целого числа в сторону уменьшения. Например, 5//3.0 равно 1.0 и 5.0//-3 равно -2.0. Хотя результатом деления с плавающей запятой является целое число, оно сохраняется в формате с плавающей запятой, чтобы при дальнейшем использовании оно воспринималось именно так. Остаток целочисленного деления - см. описание функции mod().

Деление на 0 дает пустой результат (пустую строку).
+
-
Сложение и вычитание. Примечание: в выражениях любое пустое значение (пустая строка), участвующее в математической операции, не принимается равным 0. Вместо этого, оно трактуется как ошибка, в результате которой часть выражения возвращается как пустая строка. Например, если X - пустое значение, результатом выражения X+1 будет также пустое значение, а не 1.
<<
>>
Сдвиг разряда влево и сдвиг разряда вправо. Перед вычислениями параметры с плавающей запятой округляются до целого числа. Сдвиг влево (<<) эквивалентен умножению Значения1 на "2 в степени Значение2". Сдвиг вправо (>>) эквивалентен делению Значения1 на "2 в степени Значение2", остаток округляется.
&
^
|
Побитовое И (&), побитовое исключающее ИЛИ (^), и побитовое ИЛИ (|). Самый высокий приоритет среди них имеет &, а самый низкий - |. Перед вычислениями параметры с плавающей запятой округляются до целых чисел.
. Конкатенация. Оператор точка можно использовать для объединения находящихся рядом строк и переменных (перед точкой и после нее необходимо оставить, по крайней мере, по одному пробелу). В большинстве случаев того же результата можно достичь, опустив точку (в этом случае между объединяемыми элементами должен быть хотя бы один пробел).
Пример (с помощью выражения): Var := "Цвет " . FoundColor
Пример (обычный способ): Var = Цвет %FoundColor%

В версиях 1.0.31 и выше, такие подвыражения и ссылки, как Array%i% можно объединять с другими элементами. Примеры:
Var := "Чистая стоимость " . Price * (1 - Discount/100)
Var := "Из двух переменных X и Y большее значение имеет " . Max(X, Y)
Var := "Значение элемента массива " i " " Array%i%

Когда текст присоединяется к концу переменной, обычный способ конкатенации (=) работает лучше, чем объединение с помощью выражения (:=). Пример быстрого присоединения: Var = %Var%%TextToAppend%
> <
>= <=
Больше, меньше, больше или равно, меньше или равно. Если один из параметров не является числом, сравнение производится в алфавитном порядке (в этом контексте буквальная строка в кавычках (например "55") всегда трактуется как нечисловая). Сравнение чувствительно к регистру, только если включена функция StringCaseSense.
= ==
<> !=
Равно, равно с учетом регистра, не равно. Операторы != и <> идентичны. Оператор == ведет себя идентично оператору = , т.е. в случаях, когда какой-нибудь из параметров не является числом, оба оператора всегда чувствительны к регистру. Операторы <> и !=, напротив, подчиняются функции StringCaseSense. Примечание: в этом контексте буквальная строка в кавычках (например "55") всегда трактуется как нечисловая.
NOT Логическое НЕ. За исключением более низкого приоритета, логическое НЕ аналогично оператору !. Например, выражение not (x = 3 or y = 3) аналогично выражению !(x = 3 or y = 3)
AND
&&
Оба данных оператора являются логическим И. Например: x > 3 and x < 10. По возможности, для увеличения производительности используется "схема быстрой оценки". См. ссылку в оригинале статьи.
OR
||
Оба данных оператора являются логическим ИЛИ. Например: x <= 3 or x >= 10. По возможности, для увеличения производительности используется "схема быстрой оценки". См. ссылку в оригинале статьи.
mod()
round()
abs()
Эти и другие встроенные математические функции описаны в соответствующей статье документации - см. ссылку в оригинале данной статьи.

Встроенные переменные

Также в скриптах можно использовать встроенные переменные. Большинство из них является "зарезервированными" (reserved), что означает, что скрипт не может непосредственно изменять их содержимое.

Специальные символы

A_Space Данная переменная содержит один символ пробела. См. описание команды AutoTrim.
A_Tab Данная переменная содержит один символ табуляции. См. описание команды AutoTrim.

Свойства скрипта

1, 2, 3, и т.д. Эти переменные автоматически создаются при загрузке скрипта с параметрами командной строки. Их можно изменять и на них можно ссылаться, как на обычные имена переменных (например: %1%). Переменная %0% содержит количество переданных параметров (0, если параметры переданы не были). Подробнее - см. статью Скрипты.
A_WorkingDir Текущий рабочий каталог скрипта, в котором файлы доступны по умолчанию. Конечный обратный слеш нужен только в случае, если это корневой каталог. Два примера: C:\ и C:\Мои документы. Чтобы изменить рабочий каталог, используйте функцию SetWorkingDir.
A_ScriptDir Полный путь к каталогу, где находится текущий скрипт. Для полной совместимости с AutoIt v2, конечный обратный слеш нужен только для .aut-скриптов. Пример для .aut-скриптов: C:\My Documents\
A_ScriptName Имя файла текущего скрипта без указания пути. Например: MyScript.ahk.
A_ScriptFullPath Комбинация двух переменных, приведенных выше. Определяет полную спецификацию файла скрипта, например: C:\My Documents\MyScript.ahk.
A_LineNumber [v1.0.31+] Число строк скрипта, выполняемых в данное время (или один из его #Include-файлов). Данное количество строк совпадает с количеством, которое показывает ListLines. Переменная может быть полезна для сообщений об ошибках. Например: MsgBox Нельзя записать в log-файл (количество строк %A_LineNumber%).

Поскольку скомпилированный скрипт объединяет все #Include-файлы в один большой скрипт, количество строк в нем и в нескомпилированном скрипте может различаться.
A_LineFile [v1.0.31+] Полный путь и имя файла, к которому принадлежит переменная A_LineNumber. Переменная A_LineNumber будет равна переменной A_ScriptFullPath, если данная строка не принадлежит одному из нескомпилированных #Include-файлов скрипта.
A_AhkVersion В версиях до 1.0.22 данная переменная пуста. Иначе, переменная содержит номер той версии AutoHotkey, которая исполняет скрипт (например: 1.0.22). Если скрипт скомпилирован, указывается версия, использовавшаяся для компиляции. Формат, в котором указывается номер версии, позволяет скрипту при помощи операторов > или >= проверять, больше ли переменная A_AhkVersion минимально допустимого номера версии. Например: if A_AhkVersion >= 1.0.25.07.
A_IsCompiled Содержит 1, если скрипт исполняется как скомпилированный EXE-файл, и ничего в обратном случае (в версиях от 1.0.27 и далее).
A_ExitReason Последняя причина, по который скрипт должен завершиться. У переменной есть значение, если скрипт имеет OnExit процедуру и эта процедура в данный момент исполняется или была вызвана попыткой завершить исполнение. Иначе, значения нет. Подробнее - см. описание команды OnExit.

Дата и время

A_YYYY Текущий год (4 цифры). Например: 2004. Данная переменная является синонимом переменной A_Year. Примечание: Чтобы извлечь время или дату в формате, характерном для вашего языка и местной специфики, используйте команду "FormatTime, OutputVar" (время и полная дата) или "FormatTime, OutputVar,, LongDate" (возвращает дату в полном формате).
A_MM Текущий месяц (2 цифры) от 01 до 12. Синоним A_Mon.
A_DD Текущий день месяца (2 цифры) от 01 до 31. Синоним A_MDay.
A_MMMM Полное название текущего месяца на языке пользователя. Например: Июль.
A_MMM Аббревиатура текущего месяца на языке пользователя. Например: Июл.
A_DDDD Полное название текущего дня недели на языке пользователя. Например: Воскресенье.
A_DDD Аббревиатура из трех букв текущего дня недели на языке пользователя. Например: Вск.
A_WDay Текущий день недели (1 цифра) от 1 до 7. 1 - воскресенье для любого региона.
A_YDay Текущий день года от 1 до 366. Значение возвращается без лидирующих нолей, т.е. 9, а не 009. Чтобы извлечь значение с лидирующими нолями, используйте команду: FormatTime, OutputVar, , YDay0.
A_YWeek [v1.0.24+] Текущий год и номер текущей недели согласно стандарту ISO 8601 (напр.: 200453). Чтобы отделить год от недели, используйте команды StringLeft, Year, A_YWeek, 4 и StringRight, Week, A_YWeek, 2. Точное определение переменной A_YWeek: если более четырех дней недели, в которую входит 1 января, приходится на новый год, эта неделя считается равной 1. Иначе, это последняя неделя старого года, а первой считается следующая неделя.
A_Hour Текущий час (2 цифры) от 00 до 23. Например: 17 - это 5 часов вечера. Чтобы извлечь время в формате от 1 до 12 с указателями AM/PM, сделайте так, как показано в примере: FormatTime, OutputVar, , h:mm:ss tt.
A_Min Текущая минута (2 цифры) от 00 до 59.
A_Sec Текущая секунда (2 цифры) от 00 до 59.
A_MSec Текущая миллисекунда (3 цифры) от 000 до 999. [в версиях от 1.0.29 и выше]. Чтобы убрать лидирующие нули: Milliseconds := A_MSec + 0.
A_Now Текущее местное время в формате YYYYMMDDHH24MISS. Примечание: математические операции над датами и временем могут быть выполнены с помощью команд EnvAdd и EnvSub. Кроме того, функция FormatTime может отформатировать дату и/или время в соответствии с форматом, принятом в вашем регионе или с вашими предпочтениями.
A_NowUTC Текущее универсальное глобальное время (UTC) в формате YYYYMMDDHH24MISS. Универсальное глобальное время в сущности то же самое, что и среднее время по Гринвичу (GMT).
A_TickCount Количество миллисекунд, прошедшее со времени перезагрузки компьютера. Сохранив значение A_TickCount в переменной, можно позднее измерить общее время работы. Для этого необходимо вычесть значение этой переменной из последнего значения A_TickCount. Например:
start_time := A_TickCount
Sleep, 1000
elapsed_time := A_TickCount - start_time
MsgBox, прошло %elapsed_time% миллисекунд.

Настройки скрипта

A_IsSuspended Если работа скрипта временно приостановлена, значение 1, иначе 0. [в версиях от 1.0.27 и выше].
A_BatchLines (синоним переменой A_NumBatchLines) Текущее значение, устанавливаемое командой SetBatchLines. Примеры: 200 или 10ms (в зависимости от формата).
A_TitleMatchMode Текущий режим (1, 2 или 3), устанавливаемый командой SetTitleMatchMode.
A_TitleMatchModeSpeed Текущая скорость поиска соответствия (fast или slow), устанавливаемая командой SetTitleMatchMode.
A_DetectHiddenWindows Текущий режим (On или Off), устанавливаемый командой DetectHiddenWindows.
A_DetectHiddenText Текущий режим (On или Off), устанавливаемый командой DetectHiddenText.
A_AutoTrim Текущий режим (On или Off), устанавливаемый командой AutoTrim.
A_StringCaseSense Текущий режим (On или Off), устанавливаемый командой StringCaseSense.
A_FormatInteger Текущий формат целого числа (H или D), устанавливаемый командой SetFormat.
A_FormatFloat Текущий формат числа с плавающей запятой, устанавливаемый командой SetFormat.
A_KeyDelay Текущая задержка, устанавливаемая командой SetKeyDelay (всегда десятичная, а не шестнадцатеричная).
A_WinDelay Текущая задержка, устанавливаемая командой SetWinDelay (всегда десятичная, а не шестнадцатеричная).
A_ControlDelay Текущая задержка, устанавливаемая командой SetControlDelay (всегда десятичная, а не шестнадцатеричная).
A_MouseDelay Текущая задержка, устанавливаемая командой SetMouseDelay (всегда десятичная, а не шестнадцатеричная).
A_DefaultMouseSpeed Текущая скорость, устанавливаемая командой SetDefaultMouseSpeed (всегда десятичная, а не шестнадцатеричная).
A_IconHidden Если иконка в трее скрыта, значение 1, иначе 0. Иконку можно скрыть с помощью директивы #NoTrayIcon или команды Menu.
A_IconTip Если с помощью команды Menu, Tray, Tip задана всплывающая пользовательская подсказка для иконки скрипта в трее, эта переменная содержит текст подсказки, иначе - пустое значение.
A_IconFile Если с помощью команды Menu, tray, icon задана пользовательская иконка скрипта в трее, здесь содержится полный путь и имя файла иконки. Иначе - пусто.
A_IconNumber Если переменная A_IconFile имеет пустое значение - пусто. Иначе - количество иконок в переменной A_IconFile (обычно 1).

Простой в работе пользователя

A_TimeIdle Количество миллисекунд, прошедшее с тех пор, когда система последний раз получила ввод клавиатуры, мыши или другого устройства. С помощью этой переменной удобно определять, на месте ли пользователь. У переменной есть значение, если на компьютере стоит операционная система Windows 2000, XP, или выше. Иначе - пусто. При физическом вводе, поступившем от пользователя, и при искусственном вводе, сгенерированном любой программой или скриптом (например, командами Send или MouseMove), значение устанавливается назад на 0. Поскольку значение возрастает с шагом в 10, не проверяйте, равно ли оно какому-либо значению. Вместо этого проверяйте, больше оно или меньше этого значения. Например: IfGreater, A_TimeIdle, 600000, MsgBox, Последний раз клавиатура или мышь были активны по меньшей мере 10 минут назад.
A_TimeIdlePhysical Аналогично переменной, описанной выше. Однако данная переменная игнорирует искусственные нажатия клавиш и/или клики мыши в тех случаях, когда установлен соответствующий обработчик прерываний (клавиатуры или мыши). Если ни один обработчик не установлен, переменная ведет себя равносильно переменной A_TimeIdle. Если же имеется только один обработчик прерываний, игнорируются только искусственный ввод этого типа. Переменная A_TimeIdlePhysical больше подходит для того, чтобы определить, действительно ли пользователь находится на месте, чем переменная A_TimeIdle.

Окна графического пользовательского интерфейса и строки меню

A_Gui Номер окна графического пользовательского интерфейса, запустившего текущий поток. Переменная имеет значение, если текущий поток запущен элементом управления графического пользовательского интерфейса, элементом меню или событием, подобным GuiClose/GuiEscape. Иначе - пусто. Требует версию 1.0.23 и выше.
A_GuiControl Имя переменной, соответствующее элементу управления графического пользовательского интерфейса, запустившего текущий поток. Если в этом управляющем элементе нет ассоциированной переменной, вместо нее переменная A_GuiControl содержит первые 63 символа текста/заголовка управляющего элемента (что часто используется для того, чтобы избежать необходимости присваивать каждой кнопке имя переменной). Переменная A_GuiControl не имеет значений в следующих случаях: 1) переменная A_Gui не имеет значения; 2) текущий поток запущен элементом меню графического пользовательского интерфейса или событием, подобным GuiClose/GuiEscape; 3) в элементе управления нет ассоциированной переменной и заголовка; 4) элемент управления, первоначально запустивший текущий поток, более не существует (возможно, благодаря Gui Destroy). Требует версию 1.0.23 и выше.
A_GuiWidth
A_GuiHeight
Данные переменные содержат неопределенные/случайные значения, кроме тех случаев, когда они упомянуты в процедуре GuiSize.
A_GuiX
A_GuiY
Данные переменные содержат координаты X и Y для событий GuiContextMenu и GuiDropFiles.
A_GuiControlEvent
A_GuiEvent - в версиях 1.0.36 и выше является синонимом переменной A_GuiControlEvent.
Тип события, запустившего текущий поток. Если поток не был запущен с помощью действия графического пользовательского интерфейса, эта переменная не содержит значения. Иначе, она содержит одну из нижеприведенных строк:
Normal: событие запущено однократным щелчком левой клавиши мыши или с помощью физических нажатий клавиш или кнопок (клавиши со стрелкой, клавиша TAB, пробел, подчеркнутая быстрая клавиша, и так далее). Это значение также используется для элементов меню и для специальных событий, таких, как GuiClose и GuiEscape.
DoubleClick: событие запущено двойным щелчком мыши. Примечание: однако, вначале при первом щелчке будет получено событие Normal. Другими словами, процедура запустится дважды: после первого щелчка и еще раз после второго.
RightClick: только для GuiContextMenu и ListViews.
Контекстно-зависимые значения: см. описания GuiContextMenu, GuiDropFiles, Slider, MonthCal, и ListView.
A_EventInfo
[v1.0.36+]
Содержит дополнительную информацию о событии g-label. Если дополнительной информации нет, содержит 0. Подробнее - см. описание GuiContextMenu, GuiDropFiles, ListBox, и ListView.
Данная переменная называется A_EventInfo, а не A_GuiEventInfo, поскольку используется также в событиях, не относящихся к событиям графического пользовательского интерфейса: см. описание события OnClipboardChange.
Примечание: В отличие от таких переменных, как A_ThisHotkey, каждый поток сохраняет свое собственное значение для переменных A_Gui, A_GuiControl, A_GuiX/Y, A_GuiControlEvent и A_EventInfo. Поэтому, если поток прерван другим потоком, при возобновлении исполнения он использует свои первоначальные/правильные значения этих переменных.

Горячие клавиши, строки автозамены и пункты пользовательского меню

A_ThisMenuItem Имя последнего из выбранных пунктов меню (если ничего выбрано не было - значения нет).
A_ThisMenu Имя меню, в котором выбрана переменная A_ThisMenuItem.
A_ThisMenuItemPos Число, указывающее текущую позицию переменной A_ThisMenuItem внутри переменной A_ThisMenu. Первый пункт меню будет равен 1, второй - 2, и т.д. Разделительные линии меню также имеют свое число. Если у переменной A_ThisMenuItem значения нет или эта переменная больше не существует внутри переменной A_ThisMenu, данная переменная также не содержит значение. Она также не содержит значение, если самой переменной A_ThisMenu больше не существует.
A_ThisHotkey Имя клавиши последней из выполненных горячих клавиш (если горячие клавиши не выполнялись, значения нет), например, #z. Это значение изменится, если текущий поток будет прерван другой горячей клавишей, поэтому, если вы хотите позднее использовать первоначальное значение в процедуре, немедленно скопируйте его в другую переменную.
A_PriorHotkey Аналогично переменной, описанной выше. Однако, эта переменная не будет содержать значения, если перед последней выполненной горячей клавишей не была выполнена другая горячая клавиша.
A_TimeSinceThisHotkey Количество миллисекунд, прошедших со времени нажатия последней горячей клавиши (с тех пор, как была нажата клавиша A_ThisHotkey). Каждый раз, когда переменная A_ThisHotkey не будет содержать значений, значение данной переменной будет равно 1.
A_TimeSincePriorHotkey Количество миллисекунд, прошедших со времени нажатия горячей клавиши, предшествовавшей последней выполненной горячей клавише. Каждый раз, когда переменная A_PriorHotkey не будет содержать значений, значение данной переменной будет равно 1.
A_EndChar Конечный символ, нажатый пользователем для запуска последней строки автозамены, не являющейся простой автозаменой (auto-replace hotstring). Если в конечном символе необходимости не было (благодаря опции *), данная переменная не будет содержать значения.

Операционная система и информация пользователя

A_OSType Тип запущенной операционной системы. Или WIN32_WINDOWS (т.е. Win95/98/ME), или WIN32_NT (т.е. WinNT, Win2k, WinXP и, возможно, более поздние).
A_OSVersion Одна из следующих строк: WIN_2003, WIN_XP, WIN_2000, WIN_NT4, WIN_95, WIN_98, WIN_ME. Например:
if A_OSVersion in WIN_NT4,WIN_95,WIN_98,WIN_ME
;Примечание: вокруг запятых не должно быть пробелов.
{
	MsgBox Этот скрипт требует Windows 2000/XP или более поздних.
	ExitApp
}
A_Language Язык по умолчанию системы, один из таблицы языков (см. здесь ссылку в оригинале статьи). Требует версии 1.0.24 и выше.
A_ComputerName Сетевое имя компьютера. Требует версии 1.0.24 и выше.
A_UserName Имя текущего пользователя, под которым он вошел в систему. Требует версии 1.0.24 и выше.
A_WinDir Каталог windows (в версиях от 1.0.23 и выше). Например: C:\Windows.
A_ProgramFiles Каталог Program Files (в версиях от 1.0.23 и выше). Например: C:\Program Files.
A_Desktop Полный путь и имя папки, содержащей файлы рабочего стола текущего пользователя (в версиях от 1.0.24 и выше).
A_DesktopCommon Полный путь и имя папки, содержащей файлы рабочего стола всех пользователей (в версиях от 1.0.24 и выше).
A_StartMenu Полный путь и имя папки меню Пуск текущего пользователя (в версиях от 1.0.24 и выше).
A_StartMenuCommon Полный путь и имя папки меню Пуск всех пользователей (в версиях от 1.0.24 и выше).
A_Programs Полный путь и имя папки Программы в меню Пуск текущего пользователя (в версиях от 1.0.24 и выше).
A_ProgramsCommon Полный путь и имя папки Программы в меню Пуск всех пользователей (в версиях от 1.0.24 и выше).
A_Startup Полный путь и имя папки Автозагрузка в меню Пуск текущего пользователя (в версиях от 1.0.24 и выше).
A_StartupCommon Полный путь и имя папки Автозагрузка в меню Пуск всех пользователей (в версиях от 1.0.24 и выше).
A_MyDocuments Полный путь и имя папки Мои Документы текущего пользователя. В отличие от большинства подобных переменных, в случае, если папка является корневой папкой диска, конечный обратный слеш не включается. Например, переменная будет содержать значение M:, а не M:\ (в версиях от 1.0.24 и выше).
A_IsAdmin Если у текущего пользователя есть права администратора, переменная содержит значение 1. Иначе - 0. В Windows 95/98/Me данная переменная всегда содержит значение 1.
A_ScreenWidth
A_ScreenHeight
Длина и ширина основного монитора в пикселях (напр. 1024 на 768).
Чтобы найти размеры других мониторов в мульти-мониторной системе, используйте команду SysGet.
Чтобы узнать длину и ширину рабочего стола (даже если он расположен на множестве мониторов), воспользуйтесь приведенным ниже примером (однако в Windows 95/NT, обе переменные из примера будут установлены на 0):
SysGet, VirtualWidth, 78
SysGet, VirtualHeight, 79
Кроме того, команду SysGet можно использовать для нахождения рабочей области монитора, которая может быть меньше, чем полная область монитора, часть которого занимают панель задач и другие зарегистрированные панели рабочего стола.
A_IPAddress1 по 4 IP-адреса первых четырех сетевых адаптеров в компьютере.

Прочее

A_Cursor Тип курсора мыши, отображаемого в данный момент на экране. Значением может быть одно из следующих слов: AppStarting, Arrow, Cross, Help, IBeam, Icon, No, Size, SizeAll, SizeNESW, SizeNS, SizeNWSE, SizeWE, UpArrow, Wait, Unknown. Акронимы, которые используются с курсорами, отображающимися во время изменения размеров объектов, указывают на стороны света, напр. NESW = NorthEast+SouthWest (северо-восток + юго-запад). Курсоры в форме руки (указывающей и хватающей) классифицируются как неизвестные.
При неоднократном считывании содержимого данной переменной на высокой скорости (т.е. каждые 500 мсек. или быстрее), возможность делать двойные щелчки мышью может быть нарушена. На данный момент не существует способов обойти эту проблему.
A_CaretX
A_CaretY
Текущие координаты X и Y каретки, т.е. точки вставки текста. Координаты относятся к активному окну, за исключением случаев, когда с помощью команды CoordMode их относят ко всему экрану. Если активного окна не существует, или позиция каретки не может быть определена, у переменных нет значений.
Приведенный ниже скрипт позволит вам перемещать каретку, чтобы посмотреть, как текущая позиция отображается в автоматически обновляемой всплывающей подсказке. Обратите внимание, что некоторые окна (напр. некоторые версии MS Word) показывают одну и ту же позицию каретки, независимо от ее фактической позиции.
#Persistent
SetTimer, WatchCaret, 100
return
WatchCaret:
ToolTip, X%A_CaretX% Y%A_CaretY%, A_CaretX, A_CaretY - 20
return
При неоднократном считывании содержимого данной переменной на высокой скорости (т.е. каждые 500 мсек. или быстрее), возможность делать двойные щелчки мышью может быть нарушена. На данный момент не существует способов обойти эту проблему.
Clipboard Содержимое буфера обмена операционной системы, доступное для чтения и записи. См. раздел "Буфер обмена" (в оригинале статьи здесь ссылка).
ClipboardAll Все содержимое буфера обмена (например, форматирование и текст). См. раздел ClipboardAll (в оригинале статьи здесь ссылка). Для версий от 1.0.29 и выше.
ErrorLevel См. раздел ErrorLevel (в оригинале статьи здесь ссылка).

Цикл

A_Index Число повторений цикла. Например, когда скрипт первый раз исполняет тело цикла, переменная содержит число 1. См. раздел справки о Loop.
A_LoopFileName, и т.д. Эта и другие схожие переменные действуют только в пределах файлового цикла (см. соответствующие разделы справки).
A_LoopRegName, и т.д. Эта и другие схожие переменные действуют только в пределах реестрового цикла (см. соответствующие разделы справки).
A_LoopReadLine См. раздел справки "Цикл чтения файла".
A_LoopField См. раздел справки "Цикл парсинга строки".

Перейти на главную страничку сайта (список статей, файлы для скачивания)

© 2007 http://www.script-coding.com При любом использовании материалов сайта обязательна ссылка на него как на источник информации, а также сохранение целостности и авторства материалов.