Миграция с AutoHotkey клавиатура и мышь
Как перенести send, состояние клавиш, ожидания, движение мыши и клики из AutoHotkey в API ввода EyeAuras.
Миграция с AutoHotkey — клавиатура и мышь
Эта страница поможет перенести сценарии с Send, SendText, SendInput, GetKeyState, KeyWait, MouseMove, Click, MouseClick и MouseGetPos.
Сами объявления хоткеев описаны отдельно в Hotkeys.
Краткая карта соответствий
| Что нужно в AutoHotkey | API AHK | Чем пользоваться в EyeAuras | Первый C# вариант | Оценка | Примечания |
|---|---|---|---|---|---|
| Отправить ввод с клавиатуры или текст | Send, SendText, SendInput, {Key down}, {Key up} | ISendInputScriptingApi | SendInput.KeyPress(Key.F1); SendInput.Text("hello"); | Хорошо подходит для явного ввода, но слабее для полной грамматики AHK Send. | Используйте стабильный ISendInputScriptingApi, а не устаревшие нестабильные алиасы. Конструкции AHK вроде {Raw}, {Text}, {Blind}, восстановления модификаторов, SendMode и SendLevel не имеют прямого соответствия один в один. |
| Прочитать состояние клавиши или кнопки мыши | GetKeyState, KeyWait | ISendInputScriptingApi.IsKeyDown, IsMouseDown | if (SendInput.IsKeyDown(Key.LeftCtrl)) { ... } | Для GetKeyState подходит нормально; KeyWait пока выглядит неудобно. | Отдельного документированного аналога KeyWait пока нет. В качестве низкоуровневого запасного варианта можно использовать цикл со скриптовым Sleep(...); более удобный helper или паттерн пока остаётся пробелом. |
| Переместить мышь и кликнуть | MouseMove, Click, MouseClick, MouseGetPos | ISendInputScriptingApi | SendInput.CursorPosition, SendInput.MouseMoveTo(x, y), SendInput.MouseLeftClick(x, y) | Хороший вариант, особенно благодаря перегрузкам с координатами. | Методы EyeAuras работают через выбранный симулятор ввода. При переносе AHK Click x, y лучше использовать перегрузки с координатами или WinPoint. |
Прямая отправка ввода
AutoHotkey v2:
SendText "hello"
Send "{F1}"
C# Action в EyeAuras (сервисы внедряет среда скрипта):
ISendInputScriptingApi SendInput { get; init; }
SendInput.Text("hello");
SendInput.KeyPress(Key.F1);
Рекомендация: хороший вариант для явной отправки текста и нажатий клавиш. Полная грамматика строк Send из AHK не переносится один в один, поэтому сложные случаи с {Blind}, {Raw}, повторениями и модификаторами лучше переводить осознанно, а не механически.
Ожидание отпускания клавиши
AutoHotkey v2:
KeyWait "LButton"
Скрипт EyeAuras, текущий низкоуровневый вариант:
ISendInputScriptingApi SendInput { get; init; }
while (SendInput.IsMouseDown(MouseButton.Left) && !cancellationToken.IsCancellationRequested)
{
Sleep(10);
}
Рекомендация: неудобно, но как низкоуровневый запасной вариант использовать можно. Небольшой helper вроде WaitUntilReleased(...) был бы дружелюбнее; вопросы timeout, logical vs physical state и семантики down vs up отслеживаются в AHK Gaps.
Клик по координатам
AutoHotkey v2:
Click 100, 200
C# Action в EyeAuras (сервисы внедряет среда скрипта):
ISendInputScriptingApi SendInput { get; init; }
SendInput.MouseLeftClick(100, 200);
Рекомендация: хороший вариант. Используйте перегрузки с координатами или WinPoint, а не схему «сначала переместить мышь, потом кликнуть», если само движение курсора для вас не важно.
При стандартном Windows Input точка (100, 200) задана на виртуальном рабочем столе. Пример AHK выше зависит от текущего CoordMode, поэтому без явного выбора системы координат это не полная эквивалентность. TargetWindow не делает ввод фоновым и не задаёт универсальное преобразование координат для всех симуляторов.
IsKeyDown / IsMouseDown читают состояние выбранного контроллера, а не подтверждённый аналог всех режимов AHK logical/physical. В цикле выше Sleep(10) учитывает отмену запуска; таймаут ожидания не задан. Сами вызовы ввода синхронны и не получают токен запуска автоматически. Настройки задержек и ограничения — в операциях SendInput.
Ссылки для проверки
- Документация AHK: Send, SendMode, SendLevel, GetKeyState, KeyWait, MouseMove, Click, MouseGetPos.
- Исходники AHK: keyboard_mouse.cpp, script2.cpp, wait.cpp.
- Документация EyeAuras: ISendInputScriptingApi, Input, Hooks, Hotkeys.
- Контракты EyeAuras: контекст скрипта, ввод, окна. Точные типы и сигнатуры сверяйте с SDK/XML своей версии; базовый срез — EyeAuras
20fd3d4, PoeEye0e02c98.