Переназначение клавиш в AutoHotkey: рабочие схемы без конфликтов

Переназначение клавиш в AutoHotkey делается одной строкой Исходная::Целевая и работает как “настоящая замена” — с удержанием, автоповтором и отпусканием. Для большинства задач это надёжнее, чем макросы через Send.

Оглавление

Remap или hotkey: что выбрать

Remap — это замена клавиши на клавишу:
OriginKey::DestinationKey
Подходит, когда вы хотите именно “сделать CapsLock как Ctrl” или “поменять местами Home/End”.

Hotkey — это “нажал → выполнил код”:
Key:: { ... }
Нужно для логики, условий, задержек, запуска программ и т. п.

Если задача звучит как “пусть эта кнопка будет другой кнопкой” — начинайте с remap.

Быстрый старт: минимальный скрипт

Создайте файл remap.ahk и запустите двойным кликом:

#Requires AutoHotkey v2.0+

; A → B
a::b

; Поменять местами A и B
; a::b
; b::a

Скрипт появится в трее и начнёт перехватывать нажатия.

Популярные переназначения: CapsLock, Win, отключение клавиш

CapsLock → Ctrl, но CapsLock всё ещё доступен

#Requires AutoHotkey v2.0+

+CapsLock::CapsLock  ; Shift+CapsLock включает/выключает CapsLock
CapsLock::Ctrl       ; обычный CapsLock становится Ctrl

Отключить клавишу полностью

Так удобно “приглушить” случайные нажатия (например, F1):

F1::return

Отключить правый Win (или заменить)

RWin::return
; RWin::Enter

Ремап комбинаций с модификаторами

Обозначения: ^ Ctrl, ! Alt, + Shift, # Win.

Пример: Ctrl+X делает копирование вместо вырезания:

^x::^c

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

Если ремап нужен не везде, ограничьте его активным окном:

#Requires AutoHotkey v2.0+

#HotIf WinActive("ahk_exe notepad.exe")
Home::End
End::Home
#HotIf

Так вы избежите конфликтов с играми, IDE и системными сочетаниями.

С ремапом клавиш, связанных с Alt, легко сломать привычный Alt-Tab/меню. Сначала тестируйте в простом приложении и держите “аварийную” комбинацию для выхода (например, временно добавьте Esc::ExitApp).

VK/SC коды: если клавиша “странная”

Когда клавиша зависит от раскладки или не распознаётся по имени, используйте коды:

  • VKnn — виртуальный код (смысл клавиши в Windows)
  • SCnnn — сканкод (физическая клавиша на клавиатуре)

Узнать SC можно так:

#Requires AutoHotkey v2.0+

MsgBox Format("SC: {:X}", GetKeySC("LControl"))

Если важно, чтобы ремап не менялся при переключении раскладки — чаще надёжнее привязываться к SC (физической позиции).

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

  • Путают remap и Send. Shift::Home удерживается корректно, а Shift::Send "{Home}" часто ощущается как “тычок” и ломается в играх/редакторах.
  • Порядок правил. Более специфичные строки (например, +CapsLock::CapsLock) ставьте выше общих (CapsLock::Ctrl).
  • Не работает в “повышенной” программе. Если приложение запущено от администратора, а AHK — нет, перехват может не сработать. Решение: запускать скрипт с теми же правами.
  • Конфликт с другими ремапами/утилитами. Дублирующие переназначения (в другом AHK-скрипте или драйвере) дают “плавающее” поведение.

FAQ

Можно ли переназначать только в одной раскладке?
Да, но это уже не “чистый remap”: обычно проверяют текущий язык ввода и делают hotkey-логику. Если задача простая — лучше ограничиться #HotIf по приложению.

Почему в некоторых играх ремап не работает?
Часть игр (особенно с защитой) игнорирует перехват ввода. Тогда помогает переназначение внутри игры или системный ремап на уровне драйвера/сканкодов.

Есть ли готовый базовый конфиг на каждый день?
Да, минимально полезный набор:

#Requires AutoHotkey v2.0+

+CapsLock::CapsLock
CapsLock::Ctrl

F1::return

#HotIf WinActive("ahk_exe notepad.exe")
Home::End
End::Home
#HotIf