Переход с AutoHotkey на EyeAuras

Материалы для переноса скриптов AutoHotkey в скриптинг, триггеры, действия и сервисы EyeAuras.

Переход с AutoHotkey на EyeAuras

Это основная страница по миграции скриптов AutoHotkey в EyeAuras. Тема AHK слишком большая для одного документа, поэтому подробные заметки по переходу вынесены в отдельные страницы по направлениям.

Используйте эту страницу вместе с AHK Gaps. Там собраны моменты, которые требуют дополнительной проверки, прежде чем их можно будет считать полноценными эквивалентами.

С чего начать перенос

Выберите одну операцию исходного скрипта: отправку текста, поиск окна или обработчик клавиши. Откройте соответствующий раздел ниже и выполните небольшой C# Action с явно полученными сервисами. Сначала проверьте наблюдаемый эффект, затем переносите состояние и длительный цикл работы.

Таблицы показывают маршруты, а не гарантируют полное совпадение семантики. В списке расхождений остаются режимы Send, правила потоков AHK, DPI, контролы и драйверные способы ввода. Указанные в нём ID — темы миграции, а не новые API.

Как читать это руководство

  • В примерах AutoHotkey в первую очередь используются имена и синтаксис v2. Отличия v1, включая командный синтаксис и особенности ErrorLevel, отмечаются как нюансы миграции.
  • Скрипты EyeAuras — это C#-скрипты. У файлов верхнего уровня есть доступ к host members, таким как Sleep(...), AuraTree, Variables и cancellationToken; сервисы обычно внедряются как свойства скрипта.
  • В примерах миграции отдавайте приоритет прямым script API и сервисам. Actions, Triggers и Overlays имеет смысл упоминать только тогда, когда пользователь собирает настраиваемое поведение в Aura Tree, либо когда компонент даёт существенную runtime-логику по домену, а не просто тонкую обёртку над API.
  • У каждого соответствия должна быть короткая оценка. Недостаточно написать просто «возможно» — в гайде должно быть понятно, когда подход EyeAuras чище, когда он просто приемлем, когда неудобен, а когда лучше оформить решение как helper или recipe.

Разделы

РазделДля чего использоватьТекущее состояние
HotkeysМетки горячих клавиш, Hotkey, #HotIf, простые действия по хоткеюЕсть первые примеры конверсии и ссылки на исходники. Нужна доработка для custom combo/prefix.
Keyboard And MouseSend, SendText, SendInput, GetKeyState, KeyWait, MouseMove, ClickЕсть конверсии для прямого ввода, ожидания клавиши и кликов по координатам. Грамматика Send пока остаётся пробелом.
WindowsWinExist, WinActive, WinWait, WinActivate, ControlClick, ControlSendЕсть поиск и активация одного окна. Нужна полная таблица токенов WinTitle.
CV, Pixels, And ImagesCoordMode, PixelGetColor, PixelSearch, ImageSearchЕсть конверсия PixelSearch. Нужны CoordMode и таблицы для чтения цвета одного пикселя.
Runtime, Timers, And StateSleep, SetTimer, переменные, globals, shared stateЕсть sleep и обычное состояние. Нужны recipes для таймеров и общих переменных.
ClipboardA_Clipboard, ClipboardAll, ClipWait, события буфера обменаЕсть заготовка. Нужна проверка script DI и событий.
DLL And Native InteropDllCall, CallbackCreate, Buffer, NumGet, NumPut, raw Win32Сначала прямые примеры P/Invoke; существующие API EyeAuras/PoeShared можно использовать как варианты переписывания.
AHK GapsМеждоменные семантические различия и список того, что ещё надо проверитьЗдесь ведётся учёт нерешённых моментов и кандидатов на helper-функции.

Сводная матрица

Что нужно в AutoHotkeyAPI AHKОсновной разделПуть в EyeAurasОценка
Запускать код по хоткеюМетки хоткеев вроде ^!s::, Hotkey, #HotIfHotkeys[Keybind], IHotkeyTrackerХорошо подходит для статических хоткеев; для динамических и контекстных нужно больше сопоставлений.
Отправлять ввод с клавиатуры или текстSend, SendText, SendInputKeyboard And MouseISendInputScriptingApiХорошо подходит для явного ввода; слабое место — полная грамматика Send из AHK.
Читать состояние клавиш или мышиGetKeyState, KeyWaitKeyboard And MouseISendInputScriptingApi.IsKeyDown, IsMouseDownGetKeyState выглядит нормально; для KeyWait нужен helper.
Двигать мышь и кликатьMouseMove, Click, MouseClick, MouseGetPosKeyboard And MouseISendInputScriptingApiХорошо, особенно с overloads по координатам.
Проверять и выбирать окнаWinExist, WinActive, WinWait, WinWaitActiveWindowsIWindowSelector.FindWindow(...), IWindowMatcher, window servicesХорошо для поиска одного окна; для семантики ожидания нужен отдельный паттерн.
Активировать окнаWinActivateWindowsIWindowSelector.GetWindow(...), WindowHandleExtensions.Activate(...)Хорошо работает как прямой script code после получения handle.
Спать или повторить позжеSleep, SetTimerRuntime, Timers, And StateScript Sleep(...), loops, services, observablesSleep реализуется хорошо; SetTimer требует переработки подхода.
Искать пиксели или изображенияPixelGetColor, PixelSearch, ImageSearch, CoordModeCV, Pixels, And ImagesCV.ForScreen(), CV.ForWindow(...), ICvAccessorБолее явно, чем в AHK, но и тяжелее по структуре.
Читать или писать текст в буфер обменаA_Clipboard, ClipWait, OnClipboardChangeClipboardIClipboardManagerЕсть операция записи/чтения Unicode-текста; полное поведение буфера обмена пока слабое место.
Хранить состояние скриптаПеременные, built-in variables, globalsRuntime, Timers, And StateЛокальные переменные/поля/объекты C#; ScriptVariable<T> — только для shared stateДля обычного состояния лучше, чем в AHK; для общего состояния нужны понятные recipes.
Вызывать нативные DLLDllCall, CallbackCreate, Buffer, NumGet, NumPutDLL And Native InteropТипизированные C#-обёртки P/Invoke; существующие API как варианты переписыванияПрямой эквивалент есть, но в C# нужны явные сигнатуры и понимание правил lifetime.

Ссылки по EyeAuras

Ссылки по AutoHotkey