AI Windows — ввод, хуки и горячие клавиши
AI-ориентированная карта сервисов отправки ввода, хуков, перехвата и горячих клавиш.
Карта API по Input Hooks, Hotkeys и Send Input
Справочная карта по хукам клавиатуры и мыши, хоткеям, биндам методов скрипта, API для отправки ввода, симуляторам ввода, сглаживанию, подавлению ввода и нативным detour-механизмам.
Что обычно хотят сделать
- Привязать методы скрипта к хоткеям.
- Отслеживать состояние хоткея как триггер ауры.
- Отправлять ввод с клавиатуры, мыши или текст.
- Выбрать backend для input simulator или smoother.
- Получать сырые события клавиатуры и мыши.
- Подавлять ввод для keybind-сценариев, когда это нужно.
Модель понятий
[Keybind]— это метаданные метода скрипта для привязки хоткея.HotkeyIsActiveTrigger— условие хоткея для ауры.ISendInputScriptingApi— скриптовый API для отправки ввода.IKeyboardEventsSourceпредоставляет потоки событий клавиатуры и мыши от хоста.IInputSimulatorProviderвыбирает backend для send-input.IUserInputSmootherProviderвыбирает smoother для движения мыши.- Низкоуровневые hook/detour API — это инфраструктура, а не основной API для скриптов.
Основные API
KeybindAttribute— метаданные привязки хоткея для скрипта.KeybindAttribute.Hotkey— строковый жест, напримерF5илиCtrl+Shift+P.KeybindAttribute.SuppressKey— еслиtrue, исходное событие клавиши помечается как обработанное/подавленное и для key-down, и для key-up.KeybindAttribute.IgnoreModifiers— еслиtrue, обязательные модификаторы должны присутствовать, но дополнительные тоже допускаются.KeybindAttribute.ActivationType— выбирает вызов поKeyDownилиKeyUp.KeybindActivationType— enum для key-down/key-up, который использует[Keybind].HotkeyGesture— удобное для кода представление хоткея. Если хоткей заранее известен в коде, лучше использовать конструкторы и enum-значения.IHotkeyConverter— преобразование строки вHotkeyGesture. Обычно нужен для сохранённых пользовательских настроек, ввода в редакторе или текста из конфигов.IHotkeyTracker— отслеживание хоткея во время выполнения.IsEnabledпо умолчанию равенtrue; меняйте его только если действительно хотите временно выключить и потом снова включить трекер.HotkeyIsActiveTrigger— триггер ауры по состоянию хоткея.ISendInputScriptingApi— API отправки ввода для скриптов.IInputSimulatorProvider,IInputSimulatorEx— обнаружение симулятора и выбор backend.IUserInputSmootherProvider,IUserInputSmoother— сглаживание движения мыши.IKeyboardEventsSource— потоки событий клавиатуры и мыши.HookEngine— продвинутый движок нативных detour-функций.
Что использовать в первую очередь
- Для простых клавиатурных шорткатов в скрипте —
[Keybind]. - Для пользовательских условий хоткея в ауре —
HotkeyIsActiveTrigger. - Если клавиша и модификаторы заранее известны в коде —
new HotkeyGesture(...). - Если хоткей читается из сохранённого текста или пользовательского ввода —
IHotkeyConverter. - Для отправки ввода из скрипта —
ISendInputScriptingApi. - Для simulator/smoother — id, найденные через provider.
- Для начала работы с целевым окном —
osd/selection.md.
Чего лучше избегать
- Не используйте сырые подписки на глобальные хуки для простых хоткеев.
- Не парсьте захардкоженные строки хоткеев через
IHotkeyConverter, еслиHotkeyGestureчерез конструктор будет понятнее. - Не пишите в примерах
IHotkeyTracker.IsEnabled = true, если до этого трекер не был отключён —trueуже стоит по умолчанию. - Не рассчитывайте, что id симуляторов будут установлены на каждой машине.
- Не используйте нативные detour-механизмы для обычных хуков клавиатуры и мыши.
Типовые сценарии
-
Runtime-хоткей через Rx:
- создайте
IHotkeyTrackerчерезIFactory<IHotkeyTracker>. - задайте
Hotkeyчерезnew HotkeyGesture(...), если хоткей определён в коде, или черезIHotkeyConverter, если он пришёл из сохранённой строки или пользовательского ввода. - задавайте
HotkeyMode,SuppressKey,IgnoreModifiersилиHandleApplicationKeysтолько если значения по умолчанию вам не подходят. - подпишитесь на
WhenAnyValue(x => x.IsActive)и отфильтруйте толькоtrue. - освобождайте tracker и подписку вместе со временем жизни владельца; в top-level scripts используйте
ExecutionAnchorsдля ресурсов на один запуск.
- создайте
-
Метод скрипта с
[Keybind]:- помечайте атрибутом instance-методы объекта скрипта.
- методы могут быть public или non-public.
- на один метод можно повесить несколько атрибутов
[Keybind]. - во время выполнения строка разбирается через
IHotkeyConverter. - вызов обработчика планируется в background scheduler.
- параметры метода перед вызовом разрешаются через script DI container.
- если метод возвращает
Task, runtime ждёт завершения задачи. - исключения пишутся в event log ауры как failed keybind events.
- регистрация активна только пока execution tracker скрипта находится в состоянии running.
Опорные точки для исследования
KeybindAttribute,KeybindActivationType,HotkeyTrackerRuntimeVisitor,HotkeyGesture,IHotkeyConverter,IHotkeyTracker,HotkeyIsActiveTrigger,ISendInputScriptingApi,IInputSimulatorProvider,IUserInputSmootherProvider,IKeyboardEventsSource,HookEngine.
По каким словам искать
- hotkey
- keybind
- keyboard hook
- mouse hook
- send input
- input simulator
- input smoother
- target window input
- suppress key
- ignore modifiers
- key down
- key up
- keybind activation type
- method parameter injection
- native detour
Связанные карты
scripting/runtime.mdauras/triggers.mdauras/actions.mdosd/selection.mdwindows-subsystems/window-handles.md