Миграция с AutoHotkey на runtime, таймеры и состояние

Как сопоставить Sleep, SetTimer и переменные AutoHotkey с API runtime и состояния скрипта в EyeAuras.

Переход с AutoHotkey: runtime, таймеры и состояние

Используйте эту страницу как короткую памятку по Sleep, SetTimer, обычным переменным, глобальным и встроенным переменным, а также общему состоянию.

Краткое сопоставление

Что нужно в AutoHotkeyAPI в AHKКак это делается в EyeAurasБазовая форма в C#ОценкаКомментарий
Пауза или повтор позжеSleep, SetTimerСкриптовый Sleep(...), циклы, сервисы, observablesSleep(250); или цикл с учетом отменыSleep подходит хорошо; SetTimer требует переосмысления.Скриптовый Sleep(...) в EyeAuras учитывает отмену и может завершиться раньше, если скрипт остановлен. Таймерные actions/triggers в Aura Tree — это настраиваемые компоненты, а не легковесные аналоги скриптового API.
Хранить состояние скриптаПеременные, built-in variables, globalsОбычные локальные переменные C#, поля, объекты; ScriptVariable<T> только для общего или постоянного состоянияvar count = 0; или int Count { get; set; }Для обычного состояния внутри скрипта лучше; script variables нужны только когда состояние надо разделять.ScriptVariable<T> / IVariablesScriptingApi нужны для состояния, которое должно сохраняться между запусками, разделяться между скриптами или использоваться инфраструктурой EyeAuras вне самого скрипта.

Sleep

AutoHotkey v2:

Sleep 250

Скрипт EyeAuras:

csharp
Sleep(250);
Log.Info("Пауза завершилась");

Рекомендация: хорошая и прямая замена. Sleep(...) в EyeAuras учитывает отмену, и для скриптов, которые пользователь может остановить в любой момент, это обычно удобнее.

Обычное состояние скрипта

AutoHotkey v2:

ahk
count := 0
count += 1

Скрипт EyeAuras:

csharp
var count = 0;
count += 1;
Log.Info($"Счётчик: {count}");

Для обычного состояния внутри скрипта используйте стандартные локальные переменные C#, поля и объекты. ScriptVariable<T> / IVariablesScriptingApi нужны только тогда, когда значение должно сохраняться между запусками, разделяться между скриптами или использоваться инфраструктурой EyeAuras вне скрипта.

Рекомендация: для обычного состояния внутри скрипта это лучше, чем в AHK, потому что типы здесь явные и предсказуемые. Для общих и постоянных переменных нужны отдельные примеры.

Повторить работу с явной отменой

В C# Action можно выполнить три шага с паузами:

csharp
for (var i = 1; i <= 3; i++)
{
    cancellationToken.ThrowIfCancellationRequested();
    Log.Info($"Шаг {i}");
    Sleep(250);
}

В журнале появятся шаги 1–3; остановка скрипта прерывает ожидание. Это последовательный цикл: пауза отсчитывается между шагами, а не независимый AHK SetTimer с приоритетами и правилами повторного входа. Локальный count создаётся заново при выполнении этого кода; для состояния между скриптами сначала выберите общий контекст в руководстве по переменным.

Sleep, Log и cancellationToken предоставляет верхнему уровню среда EyeAuras. В обычный класс передавайте токен и logger; для асинхронной паузы используйте await Task.Delay(250, token) с полученным токеном.

Ссылки для проверки