Переназначаем клавиши в AutoHotkey: быстрые и надёжные варианты

Чтобы сделать переназначение клавиш в AutoHotkey, достаточно создать .ahk‑файл, запустить его и прописать правило вида CapsLock::Ctrl (AHK v2/v1). Для сложных сценариев используйте hotkey-блоки, sc/vk коды и #HotIf по приложениям.

Быстрый старт: каркас скрипта и базовый remap

Рекомендуемый вариант — AutoHotkey v2 (строже синтаксис, меньше “магии”). Минимальная шапка:

#Requires AutoHotkey v2.0
#SingleInstance Force
SendMode "Input"

Простейшее переназначение (remap) — “клавиша → клавиша”:

CapsLock::Ctrl
RAlt::AppsKey
XButton1::Backspace

Отключить клавишу можно через “пустое действие”:

RWin::Return

Не отключайте без нужды Ctrl/Alt/Win: легко “запереть” себя без привычных сочетаний. Добавьте аварийный выход (см. ниже).

Обозначения модификаторов в AHK

ЗаписьЧто означает
^Ctrl
!Alt
+Shift
#Win

Примеры переназначения сочетаний:

^x::^c      ; Ctrl+X → Ctrl+C
#+s::#s     ; Win+Shift+S → Win+S

Примечание для AHK v1: логика та же, но блоки часто пишутся иначе; если скрипт “не стартует”, проверьте версию и директиву #Requires.

Когда нужен не remap, а логика: Send, удержание и sc/vk

Если нужно отправлять последовательность клавиш — используйте hotkey-блок и Send:

F6:: {
    Send "^v"
    Sleep 150
    Send "{Enter}"
}

Популярный вариант “CapsLock = Esc по тапу, Ctrl по удержанию”:

CapsLock:: {
    KeyWait "CapsLock", "T0.18"
    if (ErrorLevel) {
        Send "{Ctrl down}"
        KeyWait "CapsLock"
        Send "{Ctrl up}"
    } else {
        Send "{Esc}"
    }
}

Если правило “ломается” из-за раскладки или нестандартной клавиатуры, почти всегда помогает привязка к sc (scan code) вместо имени клавиши.

Scancode (sc) и Virtual Key (vk): что выбрать

  • scXXX — привязка к физической клавише (расположение).
  • vkXX — привязка к коду Windows.

Пример remap по scancode:

sc029::Esc

Чтобы узнать VK/SC, откройте в меню AutoHotkey пункт Key history и нажмите нужную клавишу.

Переназначение только в конкретной программе: #HotIf

#HotIf WinActive("ahk_exe notepad.exe")
CapsLock::Esc
#HotIf

Так вы избегаете конфликтов: одно поведение — в редакторе, другое — в игре/рабочем ПО.

Диагностика и безопасная эксплуатация

Добавьте “кнопку паники”, чтобы мгновенно выключить скрипт:

F12::ExitApp

Если переназначение не работает, проверьте:

  • скрипт запущен (значок в трее);
  • версия AHK соответствует синтаксису (#Requires AutoHotkey v2.0);
  • нет дублей правил на одну клавишу;
  • целевое приложение запущено от администратора (тогда и скрипт часто нужен с такими же правами);
  • в играх/с античитом перехват ввода может блокироваться — пробуйте sc и/или правила только вне игры.

Частые ошибки

  • Перепутали v1/v2 и получили “молчаливый” скрипт или ошибки.
  • Отключили Win/Ctrl/Alt без аварийной клавиши ExitApp.
  • Пишут Send там, где нужен remap (в итоге не тянутся модификаторы и “повтор при удержании”).
  • Привязались к имени клавиши, хотя нужно sc/vk (особенно на ноутбуках и с разными раскладками).
  • Забыли закрыть условие #HotIf строкой #HotIf, и правила “утекли” в другие приложения.

FAQ

Можно ли “поменять местами” две клавиши?
Да, двумя строками:

a::b
b::a

Почему CapsLock::Return отключает CapsLock?
Return без параметров означает “ничего не делать”, то есть исходное действие блокируется.

Что надёжнее — vk или sc?
Для одинакового физического расположения на разных раскладках обычно надёжнее sc. Для логики Windows/особых клавиш иногда удобнее vk.