Скан коды клавиш программа

Что бы ты там не нажимал на своей клавиатуре, X-серверу и ядру, в общем-то, все равно, что на ней написано или нарисовано. Их интересуют исключительно скан-код кнопки, причем сначала иксы считывают таблицу кодов клавиш ядра, а затем уже код клавиши привязывается к собственной таблице кодов. Если в Windows проблемы настройки мультимедийных клавиш в консоли как таковой не существует, то в Linux приходится отдельно настраивать реакцию на нажатие кнопок в консоли и в X-Window.

Чтобы узнать код клавиши, следует использовать утилиту xev, входящую в состав Х-сервера. После ее запуска появляется окно Event Tester, теперь последовательно нажимаем клавиши, запоминая выдаваемый код:

$ xev . KeyRelease event, serial 31, synthetic NO, window 0x3e00001, root 0x67, subw 0x0, time 279734676, (311,611), root:(1104,687), state 0x2000, keycode 236 (keysym 0x1008ff19, XF86Mail), same_screen YES, XLookupString gives 0 bytes: XFilterEvent returns: False KeyRelease event, serial 31, synthetic NO, window 0x2600001, root 0x67, subw 0x0, time 265877259, (883,334), root:(886,358), state 0x0, keycode 161 (keysym 0x0, NoSymbol), same_screen YES, XLookupString gives 0 bytes: XFilterEvent returns: False

Вывод может быть огромен, так как отслеживается каждое движение мышки при проходе над окном Event Tester.

Как узнать виртуальные коды клавиш | sc vk

Клавишу описывает блок KeyRelease, в частности, значение keycode как раз и является скан-кодом, который мы хотим узнать. В приведенном примере нажаты две клавиши. Клавише с кодом 236 соответствует код клавиши для X-сервера, указанный в keysym, а также действие XF86Mail, которое в KDE запускает используемый по умолчанию почтовый клиент. Для клавиши с номером 161 код и действие не определены.

Возможна ситуация, когда клавиша нажимается, но ее скан-код не выдается. Это означает, что ядро не может найти соответствующее значение. В выводе dmesg должна быть такая строка:

Use ‘setkeycodes 0xec ‘ to make it known.

То есть тебе предлагают установить скан-код клавиши самостоятельно при помощи setkeycodes, при этом значение keycode выбрать очень просто. Переведи полученную цифру в десятичное число (большинство калькуляторов это умеют) и прибавь 128. В данном примере 0xec=236, то есть получаем скан-код 364.

Если есть сомнения, список задействованных и незадействованных скан-кодов можно просмотреть, запустив в консоли утилиту getkeycodes или dumpkeys. Например, если вывод «getkeycodes | grep » ничего не дал, значит этот код можно смело использовать.

Помочь определить скан-код способна и утилита ХKeycaps (www.jwz.org/xkeycaps), которая является графическим фронт-эндом к Xmodmap.

В консоли программа xev, разумеется, не работает. Чтобы узнать скан-код, выдаваемый ядром, следует использовать утилиту showkey или getkeycodes:

$ showkey

клавиатура была в режиме UNICODE нажмите любую клавишу (программа завершится через 10 сек после последнего нажатия).

0xe0 0x6c 0xe0 0xec

Первые две цифры соответствуют нажатой клавише, вторые – отсутствию нажатия.

AutoHotKey — Узнать код клавиши, Цикл, Сторонняя программа

Настройка привязки скан-кодов в X-Window

Итак, скан-коды теперь у нас есть, нужно указать Х-серверу, что он, собственно, должен делать при нажатии этой клавиши, то есть присвоить ей символьное имя. Список символьных имен приведен в файле заголовков XF86keysym.h. По умолчанию заголовочные файлы Х-сервера в современных дистрибутивах не устанавливаются. Чтобы увидеть его в Ubuntu, нужно установить пакет x11proto-core-dev, после чего этот файл будет лежать в каталоге /usr/include/X11. Как вариант — можно обратиться к CVS-серверу X.Org. Смотрим:

Читайте также:
Оптимизировать работу программ или служб работающих

$ cat /usr/include/X11/XF86keysym.h
/* * Keys found on some «Internet» keyboards. */ #define XF86XK_Standby 0x1008FF10 #define XF86XK_AudioLowerVolume 0x1008FF11 #define XF86XK_AudioRaiseVolume 0x1008FF13 #define XF86XK_AudioPlay 0x1008FF14 #define XF86XK_AudioStop 0x1008FF15 #define XF86XK_Mail 0x1008FF19

Если мы сравним последнюю строку с выводом xev, то увидим, что значения совпадают с клавишей с keycode 236 — keysym 0x1008ff19, XF86Mail (без суффикса XK_). Список всех доступных значений в том виде, в каком они должны использоваться, ты найдешь в /usr/share/X11/XKeysymDB.

Составить свой вариант раскладки можно двумя способами: создать описание своей клавиатуры или использовать Xmodmap. Последний способ самый простой, поэтому о нем и будем говорить далее. В домашнем каталоге пользователя создаем файл .Xmodmap, в который заносим желаемые значения:

$ mcedit ~/. Xmodmap
keycode 161 XF86Calculator keycode 174 XF86AudioLowerVolume keycode 176 XF86AudioRaiseVolume keycode 162 XF86AudioPause

И так далее, принцип, думаю, ясен. Причем код клавиш можно заносить как в десятичном, так и шестнадцатеричном виде.

По моим наблюдениям, коды большинства клавиш стандартизированы. Поэтому, если ты один раз настроишь реакцию на нажатие клавиши и перенесешь файл на другой комп, есть вероятность, что на другой клаве реакция на нажатие также подписанной клавиши будет аналогичная. Пользователи рабочего стола Gnome с GDM могут прописать все эти строки в общесистемный файл /etc/X11/Xmodmap.

В других случаях нам еще нужно указать X-серверу, чтобы он использовал созданный файл. В разных дистрибутивах это реализовано по-разному, основная идея состоит в запуске команды /usr/bin/xmodmap $HOME/.Xmodmap при входе пользователя в систему или при старте Х. Тут уже каждый танцует, как хочет. На форумах предлагают использовать файл $HOME/.xsession (в некоторых дистрибутивах он может называться .Xsession), .xprofile или системный /etc/X11/Xsession. И боюсь, что это далеко не все возможные варианты. Давай посмотрим, как сделано в KUbuntu:

$ sudo grep -iR xmodmap /etc

В результате находим прелюбопытнейший файл /etc/X11/Xsession.d/80ubuntu-xmodmap такого содержания:

$ cat /etc/X11/Xsession.d/80ubuntu-xmodmap
/usr/bin/xmodmap /usr/share/apps/kxkb/ubuntu.xmodmap || true USRMODMAP=»$HOME/.Xmodmap» if [ -x /usr/bin/xmodmap ]; then if [ -f «$USRMODMAP» ]; then /usr/bin/xmodmap «$USRMODMAP» || true fi fi

То есть загружается содержимое файла ubuntu.xmodmap и пользовательский .Xmodmap, если он существует. Открыв в редакторе ubuntu.xmodmap, ты обнаружишь список keycode и сопоставленные символьные имена.

Отсюда можно сделать вывод: если разработчик сообщает о том, что его дистрибутив поддерживает мультимедийные клавиатуры, то с большой долей вероятности можно найти подобный файл. В других дистрибутивах присутствует аналогичная система запуска пользовательских xmodmap-файлов.

Теперь, когда символьные имена клавишам присвоены, можно назначать им желаемые действия. Некоторые оконные среды вроде KDE умеют отрабатывать действия по символьным именам. Так, при нажатии кнопки с XF86AudioPlay (ВОПРОС) начинает воспроизведение плеер, используемый по умолчанию.

Чтобы установить нужную комбинацию, достаточно зайти в «Центр управления KDE -> Региональные и специальные возможности -> Комбинации клавиш» (в KUbuntu ищи в «System Setting —> Keyboard plain | > keycode keynumber = keysym
# Переключение консоли на одну назад при нажатии на клавишу с кодом 105 keycode 105 = Decr_Console # Переключение консоли на одну вперед при нажатии на и клавишу с кодом 106 alt keycode 106 = Incr_Console

Но можно создавать и свои варианты, указывая команду в переменных:

Читайте также:
Размеру сможет обрабатывать сложные программы работе нужно

keycode 120 = F100 string F100 = «/sbin/shutdown -h nown»

Другими словами, по нажатии клавиши с кодом 120 будет выполнено действие, указанное в переменной F100; в нашем случае задано выключение компьютера. Вместо F100, естественно, можно использовать любое другое имя.

Теперь не менее важная часть — куда все это записывать. В документации и в многочисленных советах предлагается использовать текущий файл консольной раскладки (в моем случае — boottime.kmap.gz). Кстати, это единственный файл описания раскладок, доступный после установки KUbuntu; чтобы увидеть остальные варианты, следует установить пакет console-data.

После этого в /usr/share/keymaps/i386/ можно обнаружить несколько подкаталогов с файлами внутри. Но если тебе понадобится перейти на другую раскладку (в Ubuntu и некоторых других дистрибутивах для этих целей используется файл /etc/default/console-setup или ~/.console-setup), все настройки нужно будет перенести в другой файл, что несколько неудобно. Если ты все-таки решишься на этот шаг, используй имеющиеся записи как шаблон, ничего не записывая на первую позицию, а в конце не забудь оставить пустую строку.

Немного о ноутбуке

Пока мне не попадался ноутбук, скан-коды клавиш которого определить не удалось бы. Поэтому настройки здесь ничем не отличаются от описанных выше. Хотя есть один прием, о котором хотелось бы рассказать. Я считаю очень удобным в использовании режим гибернации, когда, включив компьютер, обнаруживаешь все на своих местах.

Современные дистрибутивы, как правило, его поддерживают, хотя настройка, в общем-то, несложна — достаточно установить пакет hibernate и переопределить необходимые параметры в конфигурационном файле. Единственное, каждый раз для перехода в этот режим нужно запускать скрипт /usr/sbin/hibernate, что не всегда удобно. Хочется просто закрыть крышку ноутбука, а вновь включив питание, обнаружить все на своих местах.

Это очень просто сделать, используя демон acpid, который представляет собой нечто вроде пользовательского интерфейса, позволяющего управлять любыми событиями ACPI, доступными через /proc/acpi/event. При этом acpid читает набор конфигурационных файлов из каталога /etc/acpi/events/. Если пакет с демоном в дистрибутиве отсутствует, устанавливаем его из репозитария; последнюю версию можно взять с сайта phobos.fs.tum.de/acpi. После установки необходимо в каталоге /etc/acpi/events создать два файла: lid и power. Первый описывает реакцию на закрытие крышки, второй — на нажатие кнопки включения питания.

$ sudo mcedit /etc/acpi/events/lid
event=button/lid.* action=/usr/sbin/hibernate
$ sudo mcedit /etc/acpi/events/power
event=button/power.* action=/sbin/shutdown -h now

Это несколько упрощенные варианты, в KUbuntu ты найдешь более сложные скрипты. После этого требуется перезапуск демона acpid:

$ sudo /etc/init.d/acpid restart

Теперь при закрытии крышки ноутбука система будет впадать в спячку с выключенным питанием, а при нажатии на кнопку питания — выключаться. Просто и удобно.

Программы настройки

Если тебе не по душе возня с конфигурационными файлами, предлагаю несколько программ, которые помогут настроить работу мультимедийных клавиш. Например, первоначальное назначение программы Sven (sven.linux.kiev.ua) — настройка дополнительных клавиш на мультимедийной клавиатуре, но, начиная с версии 0.4, она умеет исправлять ошибки при наборе текста и изменять клавиатурную раскладку.

Более того, даже если у тебя обычная клава, с ее помощью ты сможешь эмулировать мультимедиа-клавиши, использовав вместо них клавиатурные сочетания. Также можно назначить действия на определенные кнопки мыши. Она понимает приблизительно 10 000 русских слов и 9 500 английских.

Если программа не переключилась сама, то раскладку можно изменить и вручную, при помощи специально заданной клавиши (по умолчанию Break). Отдельной клавишей (Scroll Lock) можно изменять регистр слов (верхний, нижний, первая буква — верхний, остальные — нижний).

Читайте также:
Программа чтобы открывать файлы ppt

Индикатор-переключатель раскладки клавиатуры запоминает свое состояние для каждого окна, поэтому, часто переключаясь между приложениями, тебе уже не нужно будет дополнительно изменять и раскладку. Программа имеет большие возможности, и я бы советовал на нее взглянуть. Все настройки производятся при помощи графической программы, построенной на библиотеках GTK+. Sven тестировался в Linux, но в принципе должен работать и на *BSD-системах. Используемый оконный менеджер не имеет значения.

Возможности KeyTouch (keytouch.sf.net) несколько скромнее, эта утилита применяется исключительно для настройки мультимедийных клавиш. Хотя с ее помощью любой клавише можно назначить свое действие, отличающееся от установок по умолчанию. На сайте программы, кроме исходных текстов и пакетов для некоторых дистрибутивов, можно найти готовые настройки для мультимедийных клавиатур большинства известных производителей.

Еще одно интересное решение — xbindkeys (hocwp.free.fr/xbindkeys/xbindkeys.html) — позволяет присваивать любой кнопке клавиатуры и мышки любые команды, в том числе и команды оболочки. Все настройки производятся в конфигурационном файле, который имеет простой и понятный формат.

Источник: i-rrv.ru

edu-plvlml / console_scancodes.cpp

This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters

# include < iostream >// для примера 1
# include < cstdio >// для примера 2
# include < conio.h >// для примера 3
int main ( void )
setlocale (LC_ALL, » Russian » );
std::cout
std::cout
char c1;
do
std::cin. get (c1); // получить символ
std::cout. put (c1); // вывести символ
> while (c1 != ‘ q ‘ ); // сравнить с символом ‘q’
std::cout
printf ( » Пример 2 (введите символ ‘ q ‘ для выхода) n » );
char c2;
do
c2 = fgetc (stdin); // получить символ
fputc (c2, stdout); // вывести символ
> while (c2 != ‘ q ‘ ); // сравнить с символом ‘q’
printf ( » n » );
printf ( » Пример 3 (нажмите клавишу ‘ q ‘ для выхода) n » );
int ch;
do
ch = _getch (); // получить код нажатой клавиши
printf ( » 0x%02X n » , ch); // вывести код клавиши
> while (ch != 0x71 ); // сравнить с кодом клавиши ‘q’
printf ( » n » );
>

Источник: gist.github.com

Скан коды клавиш программа

Снова добрый вечер! По одному доброму совету модератора, копнул поглубже в сторону хука и создания DLL’ки. вот кусочек кода — функция, в которой определяется скан-код клавиши и успешно отсылается моей форме.

на форме просто компонент Label, в котором и отображается принятое сообщение LParam:

procedure TForm1.KeyMessageHandler(var Msg:TMessage); var KeyName:array[0..99]of Char; begin //GetKeyNameText(Msg.LParam,KeyName,sizeof(KeyName)); Label1.Caption:=IntToStr(Msg.LParam); end;

И всё работает хорошо, НО не отлично.
Каким макаром извлечь из скан-кода виртуальный код клавиши, то есть получить не ИМЯ (поэтому и закомментировал строку GetKeyNameText()), а ВИРТУАЛЬНЫЙ КОД, скажем 13 (ENTER), 27(ESC), 32(SPACE). и т.д.
пока что выводит вот такую жуть:
-1073610751 и похожие длинные числа. И почему МИНУС? это переполнение разряда или что?

Программирование — это единственный способ заставить компьютер делать то, что тебе хочется, а не то, что приходится.

Источник: www.programmersforum.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru