При нажатии клавиши F12 в браузере открывается инструмент разработчика, но вместо ожидаемого действия скрипт игнорирует событие — потому что в коде используется неверный keycode или scancode. Чтобы точно определить, какой числовой идентификатор отправляет клавиатура, достаточно воспользоваться встроенными утилитами ОС или онлайн-сервисами. Например, клавиша Enter в Windows генерирует код 13 (ASCII), но её физический скан-код может отличаться в зависимости от раскладки или модели устройства.
Проблема усложняется, если нужно отловить комбинации клавиш (например, Ctrl+Shift+T для восстановления вкладки) или спецсимволы вроде ~ или €. В таких случаях стандартные методы вроде event.keyCode в JavaScript могут давать неполные данные. Ниже — актуальные способы получения кодов для всех ОС, включая редкие случаи (например, мультимедийные клавиши на игровых клавиатурах).
Что такое коды клавиш и зачем они нужны
Каждая клавиша на клавиатуре имеет три типа идентификаторов:
- 🔢 Keycode — виртуальный код, который ОС присваивает клавише (например,
65для A). Используется в скриптах и программах. - 🖥️ Scancode — аппаратный код, зависящий от физической раскладки (например,
0x1Eдля A в QWERTY). Нужен для низкоуровневой обработки. - 📜 ASCII/Unicode — символ, который клавиша генерирует при нажатии (например,
97для строчной a).
Эти коды используются для:
- 🎮 Настройки макросов в играх (Razer Synapse, Logitech G Hub).
- 💻 Автоматизации задач через AutoHotkey или Python (библиотека
keyboard). - 🛠️ Отладки веб-приложений, где нужно перехватить нажатия (например, блокировка F5 для обновления страницы).
- 🔧 Переназначения клавиш в SharpKeys или реестре Windows.
⚠️ Внимание: Коды клавиш могут отличаться в зависимости от ОС. Например, Backspace в Windows имеетkeycode=8, а в macOS —keycode=51.
Способ 1: Онлайн-сервисы для определения кодов
Самый быстрый метод — использовать специализированные сайты, которые в реальном времени показывают коды нажатых клавиш. Популярные сервисы:
- 🌐 Keycode.info — отображает
event.key,event.keyCode,event.codeиevent.which. - 🌐 Toptal Keycode Tester — показывает виртуальный код и символ.
- 🌐 JavaScript Key Tester — подробная информация, включая модификаторы (Shift, Ctrl).
Как пользоваться:
- Откройте сервис в браузере (подходит Chrome, Firefox, Edge).
- Нажмите нужную клавишу или комбинацию.
- Скопируйте значения из блоков
Key Code(для скриптов) илиCode(для низкоуровневой обработки).
Пример: Нажатие Tab на keycode.info покажет:
event.key: "Tab"
event.keyCode: 9
event.code: "Tab"
event.which: 9
⚠️ Внимание: Онлайн-сервисы не определяют скан-коды (scancode) — только виртуальные коды. Для аппаратных идентификаторов используйте локальные утилиты.
Способ 2: Встроенные утилиты Windows
В Windows есть скрытые инструменты для получения кодов клавиш без установки ПО:
Метод 1: PowerShell или Командная строка
Запустите PowerShell и выполните команду:
$wshell = New-Object -ComObject WScript.Shell
$wshell.AppActivate('Блокнот')
while ($true) { $key = $wshell.SendKeys('{PAUSE}'); Start-Sleep -Milliseconds 100 }
Затем откройте Блокнот и нажмите клавишу. В окне PowerShell появится её код в формате 0x{HEX}.
Метод 2: Экранная клавиатура (для спецсимволов)
Если клавиша не определяется (например, мультимедийные кнопки), используйте экранную клавиатуру:
- Нажмите Win+R, введите
oskи нажмите Enter. - Включите режим
Просмотр кодов клавиш(если доступен). - Нажмите физическую клавишу — на экране отобразится её виртуальный код.
| Клавиша | Keycode (Windows) | Scancode (HEX) | ASCII/Unicode |
|---|---|---|---|
| Esc | 27 |
0x01 |
— |
| Space | 32 |
0x39 |
32 |
| Left Arrow | 37 |
0x4B |
— |
| @ (с Shift) | 50 |
0x29 |
64 |
Способ 3: Утилиты для macOS и Linux
На macOS и Linux коды клавиш определяются через терминал.
macOS: showkey и xev
Установите Homebrew (если не установлен), затем выполните:
brew install evtest
sudo evtest
Выберите устройство клавиатуры и нажимайте клавиши. Пример вывода для Caps Lock:
Event: time 1625097600.123456, type 4 (EV_MSC), code 4 (MSC_SCAN), value 70039
Event: time 1625097600.123457, type 1 (EV_KEY), code 58 (KEY_CAPSLOCK), value 1
Здесь code 58 — это scancode, а KEY_CAPSLOCK — имя события в ядре.
Linux: xev и showkey
В большинстве дистрибутивов предустановлена утилита xev. Запустите её в терминале:
xev | grep -A2 --line-buffered '^KeyRelease'
Пример вывода для F1:
state 0x0, keycode 67 (keysym 0xffbe, F1), same_screen YES
Здесь keycode 67 — это виртуальный код клавиши.
⚠️ Внимание: В Linux коды клавиш зависят от текущей раскладки. Например, Ё в русской раскладке может иметь другой keycode, чем ~ в английской.
Способ 4: JavaScript для веб-разработчиков
Если вам нужно отладить обработку клавиш на веб-странице, добавьте в HTML следующий код:
<input type="text" onkeydown="alert(event.keyCode)">
Или используйте полноценный обработчик:
document.addEventListener('keydown', function(event) {
console.log({
key: event.key,
keyCode: event.keyCode,
code: event.code,
which: event.which
});
});
Разница между полями:
- 🔑
event.key— символ клавиши ("a","Enter"). - 📶
event.keyCode— устаревший виртуальный код (например,65для A). - 🖥️
event.code— физическое положение клавиши ("KeyA","Digit1").
Важно: С 2020 года event.keyCode помечен как устаревший (deprecated). Вместо него используйте event.code.
1. Откройте консоль браузера (F12 → вкладка Console)
2. Вставьте код обработчика события
3. Нажмите клавишу и проверьте вывод в консоли
4. Для комбинаций (например, Ctrl+C) проверьте поле event.ctrlKey
-->
Способ 5: Специализированное ПО
Для продвинутых задач (например, перехват клавиш на уровне ядра) используйте:
- 🖥️ KeyEvent Tester (Windows) — показывает scancode и virtual-key code.
- 🎯 WhatPulse — анализирует нажатия и генерирует отчёты с кодами.
- 🛠️ AutoHotkey Window Spy — определяет коды для создания скриптов.
Пример работы AutoHotkey Window Spy:
- Установите AutoHotkey с официального сайта.
- Запустите
Window Spy.exeиз папки с программой. - Наведите курсор на любое окно и нажмите клавишу. В логе появится строка:
VK=1D SC=01D (Ctrl)
VK=43 SC=02E (C)
Здесь SC=01D — это scancode для Ctrl.
Как узнать коды клавиш на ноутбуках с нестандартной раскладкой (например, Lenovo Yoga или MacBook)
На таких устройствах клавиши могут иметь нестандартные скан-коды из-за аппаратных особенностей. Используйте фирменные утилиты:
- Для Lenovo: Lenovo Vantage → "Ввод" → "Клавиатура".
- Для MacBook: Клавиатурный просмотрщик (включается в "Системные настройки" → "Клавиатура").
Если утилиты нет, подключите клавиатуру к другому ПК и проверьте коды через evtest (Linux) или KeyEvent Tester (Windows).
Расшифровка кодов для популярных клавиш
Ниже — таблица с кодами клавиш, которые чаще всего используются в скриптах и играх:
| Клавиша | Keycode (Windows/macOS) | Scancode (HEX) | ASCII | Применение |
|---|---|---|---|---|
| Ctrl | 17 |
0x1D |
— | Модификатор в горячих клавишах |
| Alt | 18 |
0x38 |
— | Альтернативные комбинации |
| Delete | 46 |
0x53 |
— | Удаление файлов/символов |
| ; | 186 (или 59) |
0x27 |
59 |
Спецсимволы в коде |
| Print Screen | 44 |
0x37 |
— | Скриншоты |
Для мультимедийных клавиш (например, регулировка громкости) коды зависят от производителя. Например, на клавиатурах Logitech:
- Volume Up:
VK_VOLUME_UP(виртуальный код175). - Play/Pause:
VK_MEDIA_PLAY_PAUSE(виртуальный код179).
FAQ: Частые вопросы о кодах клавиш
🔍 Почему одна и та же клавиша имеет разные коды в Windows и macOS?
Операционные системы используют разные схемы виртуальных кодов. Например, Enter в Windows — это 13, а в macOS — 36 (для числовой клавиатуры) или 76 (для основной клавиши). Это связано с историческими особенностями ядер ОС.
🎮 Как узнать коды клавиш для игрового контроллера (например, Xbox или PlayStation)?
Коды кнопок геймпада определяются через API DirectInput (Windows) или SDL (кроссплатформенные игры). Для тестирования используйте:
- joy.cpl (Панель управления → "Устройства и принтеры" → "Игровые контроллеры").
- jstest-gtk (Linux).
Пример: Кнопка A на Xbox-контроллере имеет код 0 в DirectInput.
💻 Можно ли переназначить скан-коды клавиш на уровне BIOS?
Нет, скан-коды (scancode) жестко прописаны в микросхеме клавиатуры. Однако их обработку можно изменить:
- В Windows — через реестр (
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout). - В Linux — через
setkeycodesилиxmodmap.
Для полного переназначения потребуется прошивка клавиатуры (например, через QMK Firmware для механических клавиатур).
📱 Как узнать коды клавиш на виртуальной клавиатуре Android/iOS?
Мобильные ОС не предоставляют прямого доступа к скан-кодам, но виртуальные коды можно получить через:
- Android:
KeyEventв Android Studio (например,KeyEvent.KEYCODE_ENTER=66). - iOS:
UIKeyInput(коды совпадают с macOS).
Для тестирования используйте эмуляторы или логи приложений.
⚡ Почему моя клавиша отправляет неверный код?
Причины:
- Залипание или физическая поломка клавиши (проверьте через Экранную клавиатуру).
- Конфликт драйверов (обновите ПО клавиатуры через Диспетчер устройств).
- Переопределение кодов в реестре или через ПО вроде SharpKeys.
- Аппаратные особенности (например, клавиатуры Apple Magic Keyboard отправляют нестандартные скан-коды).
Решение: Подключите клавиатуру к другому ПК и проверьте коды заново.