Пробелы при миграции с AutoHotkey

Известные расхождения в семантике и список проверки для документации по миграции с AutoHotkey в EyeAuras.

Проблемные места при миграции с AutoHotkey

На этой странице собраны места, где поведение AutoHotkey имеет достаточно скрытой семантики, и поэтому гайд по миграции должен быть особенно аккуратным.

Запись в таблице не всегда означает, что EyeAuras не может решить задачу. Чаще это значит, что нам все еще нужен проверенный рецепт, более понятная карта API или явная пометка «не эквивалентно».

Статусы:

  • Open — еще не проверено.
  • Mapped — путь в EyeAuras есть, но все еще нужны документация и примеры.
  • Candidate helper — небольшой wrapper или готовый рецепт может сильно упростить миграцию.
  • Not equivalent — такой сценарий лучше переписывать, а не переводить напрямую.

Базовые расхождения

IDОбластьПоведение AutoHotkeyМаршрут в EyeAurasЧто еще нужно проверить или описатьСтатус
AHK-001Ожидание клавишKeyWait ждет отпускания или нажатия клавиши/кнопки, поддерживает timeout, logical/physical mode и влияет на поведение потока hotkey.ISendInputScriptingApi.IsKeyDown, IsMouseDown, script Sleep(...) loop.Текущий перевод в скрипт выглядит громоздко и слишком низкоуровнево. Нужно проверить паритет logical vs physical state и задокументировать helper с учетом отмены для ожидания up/down с timeout.Candidate helper
AHK-002Режимы координатCoordMode меняет значения по умолчанию для AHK thread для координат мыши, пикселей, tooltip, caret и menu. Для многих API по умолчанию используются client coordinates активного окна.ForScreen(), ForWindow(IWindowHandle), OSD region transform matrices, IWindowHandle bounds.Нужна явная таблица соответствия для Screen, Window и Client, а также примеры для window-relative мыши и CV.Open
AHK-003Грамматика SendSend разбирает символы модификаторов, {Key down/up}, counts повтора, raw/text/blind modes и выбирает send modes. SendMode также меняет поведение некоторых mouse helper.ISendInputScriptingApi.KeyPress, KeyDown, KeyUp, Gesture, Text, input simulator ids.Нужно решить, учить ли только ручному переводу в документации или дать небольшой helper-парсер AHK send-string для частых случаев.Open
AHK-004Восстановление модификаторовВ AHK Send есть menu masking, восстановление модификаторов, {Blind}, защиты для Win-key и управление self-trigger через #InputLevel / SendLevel.Manual KeyDown/KeyUp, Gesture, Text.Нужны тесты на stuck modifiers, комбинации с Win-key, активацию Alt-меню и рекурсию send-from-hotkey.Open
AHK-005Префиксы hotkeyAHK поддерживает ~, *, $, Up, left/right modifiers, пользовательские комбинации через & и контекстный #HotIf.KeybindAttribute with SuppressKey, IgnoreModifiers, ActivationType, plus IHotkeyTracker for runtime hotkeys.Нужно сопоставить префиксы AHK со свойствами keybind в EyeAuras. Для пользовательских комбинаций из двух клавиш и условий #HotIf могут понадобиться рецепты, а не прямой перевод.Mapped
AHK-006Сопоставление оконAHK WinTitle поддерживает A, ahk_exe, ahk_class, ahk_id, ahk_pid, SetTitleMatchMode, hidden-window rules и per-thread поведение Last Found Window.WindowMatchExpression, IWindowMatcher, IWindowListProvider, IWindowSelector.Базовое сопоставление по title/process/path/handle уже покрыто. Но все еще нужна таблица token-by-token для AHK WinTitle, правил регистра, hidden windows, A и Last Found Window. В EyeAuras лучше явно сохранять полученный IWindowHandle, а не полагаться на неявное состояние last-found.Open
AHK-007Ввод на уровне контроловControlClick и ControlSend могут работать по контролам и иногда позволяют не активировать окно.ISendInputScriptingApi.TargetWindow, send-input actions, possible native/window services.Нужно проверить, есть ли script-facing API для уровня контролов. Если нет, это стоит пометить как territory для rewrite/native interop.Open
AHK-008ТаймерыSetTimer создает timed subroutines с period, one-shot negative periods, priority, deletion и правилами reentrancy.Script services with loops or observables; Aura Tree timer components only for configurable aura behavior.Нужен рекомендуемый паттерн для повторяющейся работы и раздел с объяснением, что семантика timer thread из AHK напрямую не переносится. Ограничения конкретного TimerTrigger нельзя переносить на все таймеры C#-скрипта.Open
AHK-009Clipboard wait/eventsA_Clipboard, ClipWait, ClipboardAll и OnClipboardChange покрывают text, all formats, waiting и events.IClipboardManager has text, image, file-drop, data object, and contains methods.Нужно проверить доступность через DI в скриптах, ограничения UI thread, доступность сервисов ожидания/событий изменения и сохранение всех форматов.Open
AHK-010Чтение пикселяPixelGetColor возвращает одну RGB hex string по координате и имеет режимы Alt/Slow.ICvAccessor.ProcessPixels, PixelSearch, PickColor.Нужен короткий рецепт для цвета одного пикселя и заметки про visibility, перекрытие курсором и различия между full-screen/game capture.Candidate helper
AHK-011Ошибки при pixel/image searchВ AHK v2 функции могут возвращать значения или бросать исключения в зависимости от функции и типа ошибки; в v1 часто использовался ErrorLevel.EyeAuras PixelSearch returns Point.Empty, ImageSearch returns Rectangle.Empty, raw APIs expose processed event args.Нужна таблица миграции для v1/v2/error-handling.Open
AHK-012ПеременныеВ AHK есть dynamic variables, ошибки unset-variable в v2, built-in variables и свободные паттерны scalar/object.Primary: C# locals, fields, and objects. Shared/persistent: IVariablesScriptingApi, ScriptVariable<T>.Нужны примеры, которые разделяют обычное состояние внутри скрипта и состояние, которое разделяется между запусками, между скриптами или с инфраструктурой EyeAuras. Также все еще нужно покрыть замену dynamic variable и typed conversions.Open
AHK-013Активация окна из скриптаWinActivate — это обычная функция, которая может restore/minimize/activate подходящие окна.Script route: IWindowSelector.GetWindow(...), WindowHandleExtensions.Activate(...), UnsafeNative.ActivateWindow(...).Отдельного scripting API WinActivate(...) нет. Не используйте WinActivateAction как тонкую обертку из скриптов — это action component для Aura Tree. Нужно явно показать timeout/failure semantics, потому что foreground activation может не сработать или быть заблокирована Windows.Mapped
AHK-014DPI и мониторыНа coordinate APIs в AHK влияют CoordMode, DPI, client area активного окна и multi-monitor layouts.IWindowHandle bounds, ForScreen(), ForWindow(...), OSD transform matrices.Нужны примеры для multi-monitor и DPI для мыши, CV и выбора region.Open
AHK-015DLL и native interopDllCall, CallbackCreate, Buffer, NumGet и NumPut упрощают native calls и работу с pointer/struct, но делают ее очень динамической.Direct migration is typed C# P/Invoke wrappers or small domain services; existing EyeAuras/PoeShared APIs are rewrite options.Нужен более полный гайд по native interop для structs, callbacks, ownership, bitness и случаев, когда raw interop лучше заменить уже существующими API.Open

Как пользоваться списком

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

Статус в таблице относится к полному соответствию AHK, а не к существованию метода EyeAuras. В срезе EyeAuras 20fd3d4 / PoeEye 0e02c98 уточнены отдельные границы: стандартный ввод использует координаты рабочего стола и не гарантирует background input; selector хранит цель и не ждёт появления окна; запись текста в буфер доступна через нативную регистрацию; пустой Point у CV неоднозначен для (0, 0). Это не закрывает паритет всех режимов.

AHK-примеры тематических страниц используют v2. Не переносите из v1 командный синтаксис и ErrorLevel без отдельной сверки с изменениями v2. Подробные внешние ссылки находятся рядом с соответствующими операциями.