Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.51/43: Рейтинг темы: голосов - 43, средняя оценка - 4.51
 Аватар для BARS1991
23 / 15 / 0
Регистрация: 16.11.2009
Сообщений: 332

Работа с дополнительными клавишами клавиатуры...

24.11.2011, 02:38. Показов 8345. Ответов 23
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть у меня ноутбук. У него есть клавиши включения\отключения Bluetooth, Wi-Fi, энергосбережение. Есть и клавиши управления проигрывателем, только они включаются при нажатии клавиши "Fn" Вот только программа производителя ноута для работы с этими клавишами ужасно кривая и нормально работают только клавиши Bluetooth и Wi-Fi. Управоение проигрывателем не работает вообще, а при нажатии на клавишу энергосбережения выскакивает какая-то чушь При этом в Linux все работает без проблем. Система отлично определяет коды этих клавиш и работает с ними без всяких дополнительных программ... А в винде, как всегда, проблемы

Вот я и подумал, что надо написать свою программу для работы с этими клавишами. Вот только не знаю, как определить код этих клавиш. GetAsyncKeyState() их не видит. Какие еще есть способы?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.11.2011, 02:38
Ответы с готовыми решениями:

Как привязать программу с клавишами клавиатуры?
Как реализовать так,чтобы когда я жму на клаве клавишу "1" и у меня в программе сработала кнопка с подписью "1"?

Блокировка клавиатуры клавишами [Ctrl] + [В], разблокировать через 8 сек.
Написать программу на Turbo Assembler Блокировка клавиатуры клавишами + , разблокировать через 8 сек.

Неправильная работа функции СУММ с дополнительными условиями в Excel
Добрый день. Помогите разобраться в следующей ситуации. Есть реестр отгрузок (дата, номер накладной, сумма отгрузки) за текущий год...

23
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
24.11.2011, 03:03
keybd_event
структура KEYBDINPUT и EYEVENTF_SCANCODE
What's the difference between GetKeyState and GetAsyncKeyState?
Это перевод.
Я вижу, что, похоже, разница между функциями GetKeyState и GetAsyncKeyState слабо понимается людьми.

GetKeyState возвращает состояние виртуальной клавиши. Другими словами, GetKeyState сообщает о состоянии клавиатуры, основываясь на сообщениях, которые вы получили из своей очереди сообщений. Это не то же самое, что состоянии кнопок на физической клавиатуре:

Если пользователь печатает быстро, GetKeyState не сообщит о этих нажатиях, до тех пор, пока вы не используете функции PeekMessage или GetMessage для выборки этих сообщений из очереди.
Если пользователь переключился на другое окно, то функция GetKeyState не увидит что пользователь печатает в другой программе, поскольку ввод отправляется не в вашу очередь.

Когда же вам нужно использовать GetKeyState, а когда GetAsyncKeyState?

Для работы с интерфейсом пользователя вам почти всегда нужно использовать GetKeyState.

Если вы отвечаете на входящее оконное сообщение и хотите знать, какие кнопки были нажаты в момент отправки сообщения - то вы захотите использовать GetKeyState. Например, если вы хотите отличить щелчок левой кнопки мыши от Alt + щелчок, вы должны использовать GetKeyState для запроса состояния клавиши Alt (известной как VK_MENU по историческим причинам). Это потому что вы хотите знать, была ли нажата Alt во время щелчка мышью, а не нажата ли эта кнопка прямо сейчас. Отпустил ли пользователь Alt между моментом щелчка и временем вашей обработки сообщения - совершенно неважно. Вас заботит только была ли нажата Alt в момент щелчка.

Заметьте, что если вы реализуете обработчик контекстного меню, то вам вообще не следует использовать ни GetKeyState, ни GetAsyncKeyState, потому что контекстное меню может вызываться программно, вообще без действий со стороны пользователя. В IContextMenu.QueryContextMenu вы должны проверять флаг CMF_EXTENDEDVERBS, вместо того, чтобы тестировать клавиатуру, чтобы определить, следует ли вам отображать дополнительные команды. Аналогично, в IContextMenu.InvokeCommand вам следует проверять флаги CMIC_MASK_CONTROL_DOWN и CMIC_MASK_SHIFT_DOWN, если вы хотите менять поведение в зависимости от состояния модификаторов.

Теперь, когда мы увидели пример различий между GetKeyState и GetAsyncKeyState, вы можете самостоятельно объяснить поведение, которое видит этот пользователь.
1
 Аватар для BARS1991
23 / 15 / 0
Регистрация: 16.11.2009
Сообщений: 332
24.11.2011, 03:41  [ТС]
А можно какой-нибудь простой пример?
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
24.11.2011, 03:42
пример чего?
0
 Аватар для BARS1991
23 / 15 / 0
Регистрация: 16.11.2009
Сообщений: 332
24.11.2011, 03:49  [ТС]
Распознавания кода дополнительных клавиш...
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
24.11.2011, 03:55
я не знаю, меняется ли код клавиш при включении "Fn" , поискать бы ответ на сайте производителя или спросить у его тех.поддержки.
0
 Аватар для BARS1991
23 / 15 / 0
Регистрация: 16.11.2009
Сообщений: 332
24.11.2011, 04:04  [ТС]
При включении Fn код клавиш меняется, управление проигрывателем вынесено на Fn+Home(PgUp, PgDn, End). Остальные клавиши управления работают без клавиши Fn.
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
24.11.2011, 05:07
Скан-код: Ремаппинг клавиш на клавиатуре
Переопределение клавиш
Раскладка клавиатуры ноутбука

Мноигих беспокоит проблема
Мноигих беспокоит проблема расположения клавиши Fn в левом нижнем углу - то есть там где должна находится клавиша Ctrl. С данной проблемой я обратился в Samsung, но получил такой ответ, что данная преблема нерешима...

цитата (Мой вопрос):Я испытваю серъезные проблем при работе с ноутбуком в связи с тем что левая клавиша Fn находится там где ДОЛЖНА находится клавиша LCtrl (то есть с краю!)
Подскажите каким способом возмождно поменять эти клавиши местами? На уровне виндовс мне это сделать не удалось. Возможно существует специальная BIOS прошивка позволяющая решить эту проблему, ежедневно нарушающую душевный кофмфорт людей?

цитата (Ответ Samsung):К сожалению это не возможно, можно рекомендовать использоватьвнешнюю
клавиатуру.

Перерыв кучу инфы в инете, я только убедился в том что на данный момент это именно так и огромное количество людей по сей день возмущены наличием этой проблемы. Клавиша Fn является hardware based, и ремапить ее на уровне винды не представляется возможным. Однако существуют гепотетические решания данной проблемы:
- смена местами этих кглавиш на уровне BIOS.
- вмешательство с помощью паяльника.

Первый способ представляетя более рациональным. Однако, мировая тенденция такова что производители ноутбуков препочитают ждать пока пользователи переучатся, тому чтобы пойти им навстречу и выпустить BIOS версии со смененными клавишами (как виариант с возможностью переключения их местами в настройках BIOS).
Такая ситуация неприемлема, и лично я вижу 2 варианта решения данной задачи:
-давление на производителей ноутбуков с целью удовлетворения требований недовольнызх порльзователей
-самостоятельная модификация BIOS прошивки с целью смены клавиш местами.
Сразу скажу, что первый вариант уже выдвигался пользователями несколько лет назад и не получил никакого результата. Поэтому предлагаю рассмотреть вариант модификации прошивки. Что скажут по этому поводу знающие спецы? Насколько это вообще реально в теории???
Клавиша Fn работает напрямую с контроллером клавиатуры. Cистема (WinAPI, BIOS, etc.) вообще её не видит.

А на ассемблере можно к ней обратиться?...

Нет, я уже сказал. Fn не генерит scan-код вообще. (разве что какая-то особая модель ноута...)
- Как переназначить клавиши на клавиатуре?
Многим кажется неудобной "умолчальная" раскладка клавиатуры на ноутбуках. Можно поменять расположение клавиш по Вашему желанию (исключением часто является клавиша Fn). В ОС семейства Windows это можно делать на уровне системы. Необходимые ключи в реестре расположены в его ветке HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ Keyboard Layout \ Scancode Map. Для более наглядного изменения этих ключей есть несколько небольших программ. Одна из них (RemapKey) входит в комплект Windows Resource Kit Tools (для NT-based Windows) или Windows 95 Kernel Toys Set (для Win9x-based), доступных для скачивания с сайта MicroSoft. Есть и аналогичные программы сторонних разработчиков - Key remapper, KeyTweak, TradeKeys 2, AutoHotKey, Keyboard Maniac и др. C переназначением клавиши Fn есть сложности (*****.ixbt.com/topic.cgi?id=17:18173) , поскольку она не выдаёт стандартный скан-код, а обрабатывается встроенной логикой ноутбука (Embedded Controller). Поскольку такая логика у каждого вендора своя, универсального решения этой проблемы не существует.
Линуксоидам прощее.
Как заставить работать Fn-сочетания клавиш ноутбука

Данным способом (как мне кажется) можно завести соответствующие клавиши на любом ноутбуке.

На примере ноутбука Sony Vaio PCG-V505AX
Комбинации клавиш ноутбука Fn+F3 Fn+F4 Fn+F5 по умолчанию в Fedora не работают.

Пакет spicctrl.i386 : Sony Vaio laptop SPIC control program не помог.
Недавно разобрался с утилитами из пакета input-utils, результат следующий:

Имеется Sony Vaio Keys на input8:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
[root@localhost nick]# cat /proc/bus/input/devices
...................................
...................................
I: Bus=0010 Vendor=104d Product=0000 Version=0000
N: Name="Sony Vaio Keys"
P: Phys=
S: Sysfs=/devices/LNXSYSTM:00/device:00/PNP0A03:00/device:0e/SNY6001:00/input/input8
U: Uniq=
H: Handlers=kbd event8 
B: EV=13
B: KEY=1f 3fff0000 c 0 100000 0 2 0 6000 100400 0 40300400 0 0 0 0
B: MSC=10
...................................
Запускаем утилиту showkey и нажимаем комбинации Fn+F3 Fn+F4 Fn+F5:
C++
1
2
3
4
5
6
7
8
9
[root@localhost nick]# showkey
kb mode was UNICODE
press any key (program terminates after 10s of last keypress)...
keycode 468 press
keycode 468 release
keycode 469 press
keycode 469 release
keycode 470 press
keycode 470 release
получам key-коды
C++
1
2
3
468 для Fn+F3
469 для Fn+F4
470 для Fn+F5
Теперь нужна утилита input-kbd из пакета input-utils.
Пакет input-utils можно взять в репозитарии Tigro:
Код:

[root@localhost nick]# yum install input-utils

или если репозитарий не подключен:

[root@localhost nick]# rpm -Uvh http://mirror.yandex.ru/fedora... 9.i386.rpm

Смотрим keyboard map на event8:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
[root@localhost nick]# input-kbd 8
/dev/input/event8
   bustype : BUS_ISA
   vendor  : 0x104d
   product : 0x0
   version : 0
   name    : "Sony Vaio Keys"
   bits ev : EV_SYN EV_KEY EV_MSC
 
map: 36 keys, size: 50/64
0x0000 = 212  # KEY_CAMERA
0x0004 = 465  # KEY_FN_ESC
0x0005 = 466  # KEY_FN_F1
0x0006 = 467  # KEY_FN_F2
0x0007 = 468  # KEY_FN_F3
0x0008 = 469  # KEY_FN_F4
0x0009 = 470  # KEY_FN_F5
0x000a = 471  # KEY_FN_F6
0x000b = 472  # KEY_FN_F7
0x000c = 473  # KEY_FN_F8
0x000d = 474  # KEY_FN_F9
0x000e = 475  # KEY_FN_F10
0x000f = 476  # KEY_FN_F11
0x0010 = 477  # KEY_FN_F12
0x0011 = 466  # KEY_FN_F1
0x0012 = 467  # KEY_FN_F2
0x0013 = 480  # KEY_FN_D
0x0014 = 481  # KEY_FN_E
0x0015 = 482  # KEY_FN_F
0x0016 = 483  # KEY_FN_S
0x0017 = 484  # KEY_FN_B
0x0018 = 237  # KEY_BLUETOOTH
0x0019 = 148  # KEY_PROG1
0x001a = 149  # KEY_PROG2
0x001b = 202  # KEY_PROG3
0x001c = 158  # KEY_BACK
0x001d = 237  # KEY_BLUETOOTH
0x001e = 237  # KEY_BLUETOOTH
0x001f = 138  # KEY_HELP
0x0020 = 464  # KEY_FN
0x0029 = 372  # KEY_ZOOM
0x002a = 289  # BTN_THUMB
0x002f = 238  # KEY_WLAN
0x0030 = 238  # KEY_WLAN
0x0031 = 418  # KEY_ZOOMIN
0x0032 = 419  # KEY_ZOOMOUT
Создаем свою конфигурацию keyboard map в файле SonyFnKeys:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
[root@localhost nick]# gedit /etc/input-kbd/SonyFnKeys
 
копируем в него вывод и меняем key-коды 468, 469, 470 на нужные:
 
    0x0000 = 212  # KEY_CAMERA
    0x0004 = 465  # KEY_FN_ESC
    0x0005 = 466  # KEY_FN_F1
    0x0006 = 467  # KEY_FN_F2
    0x0007 = 113  # KEY_MUTE
    0x0008 = 114  # KEY_VOLUMEDOWN
    0x0009 = 115  # KEY_VOLUMEUP
    0x000a = 471  # KEY_FN_F6
    0x000b = 472  # KEY_FN_F7
    0x000c = 473  # KEY_FN_F8
    0x000d = 474  # KEY_FN_F9
    0x000e = 475  # KEY_FN_F10
    0x000f = 476  # KEY_FN_F11
    0x0010 = 477  # KEY_FN_F12
    0x0011 = 466  # KEY_FN_F1
    0x0012 = 467  # KEY_FN_F2
    0x0013 = 480  # KEY_FN_D
    0x0014 = 481  # KEY_FN_E
    0x0015 = 482  # KEY_FN_F
    0x0016 = 483  # KEY_FN_S
    0x0017 = 484  # KEY_FN_B
    0x0018 = 237  # KEY_BLUETOOTH
    0x0019 = 148  # KEY_PROG1
    0x001a = 149  # KEY_PROG2
    0x001b = 202  # KEY_PROG3
    0x001c = 158  # KEY_BACK
    0x001d = 237  # KEY_BLUETOOTH
    0x001e = 237  # KEY_BLUETOOTH
    0x001f = 138  # KEY_HELP
    0x0020 = 464  # KEY_FN
    0x0029 = 372  # KEY_ZOOM
    0x002a = 289  # BTN_THUMB
    0x002f = 238  # KEY_WLAN
    0x0030 = 238  # KEY_WLAN
    0x0031 = 418  # KEY_ZOOMIN
    0x0032 = 419  # KEY_ZOOMOUT
сохраняем.

Теперь меняем keyboard map для input8 на свою:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
[root@localhost nick]# input-kbd -f /etc/input-kbd/SonyFnKeys 8
/dev/input/event8
map: 36 keys, size: 50/64
set: 0x0000 = 212  # KEY_CAMERA
set: 0x0004 = 465  # KEY_FN_ESC
set: 0x0005 = 466  # KEY_FN_F1
set: 0x0006 = 467  # KEY_FN_F2
set: 0x0007 = 113  # KEY_MUTE
set: 0x0008 = 114  # KEY_VOLUMEDOWN
set: 0x0009 = 115  # KEY_VOLUMEUP
set: 0x000a = 471  # KEY_FN_F6
set: 0x000b = 472  # KEY_FN_F7
set: 0x000c = 473  # KEY_FN_F8
set: 0x000d = 474  # KEY_FN_F9
set: 0x000e = 475  # KEY_FN_F10
set: 0x000f = 476  # KEY_FN_F11
set: 0x0010 = 477  # KEY_FN_F12
set: 0x0011 = 466  # KEY_FN_F1
set: 0x0012 = 467  # KEY_FN_F2
set: 0x0013 = 480  # KEY_FN_D
set: 0x0014 = 481  # KEY_FN_E
set: 0x0015 = 482  # KEY_FN_F
set: 0x0016 = 483  # KEY_FN_S
set: 0x0017 = 484  # KEY_FN_B
set: 0x0018 = 237  # KEY_BLUETOOTH
set: 0x0019 = 148  # KEY_PROG1
set: 0x001a = 149  # KEY_PROG2
set: 0x001b = 202  # KEY_PROG3
set: 0x001c = 158  # KEY_BACK
set: 0x001d = 237  # KEY_BLUETOOTH
set: 0x001e = 237  # KEY_BLUETOOTH
set: 0x001f = 138  # KEY_HELP
set: 0x0020 = 464  # KEY_FN
set: 0x0029 = 372  # KEY_ZOOM
set: 0x002a = 289  # BTN_THUMB
set: 0x002f = 238  # KEY_WLAN
set: 0x0030 = 238  # KEY_WLAN
set: 0x0031 = 418  # KEY_ZOOMIN
set: 0x0031 = 418  # KEY_ZOOMOUT
Все, клавиши Fn+F3 -Mute, Fn+F4 - Volume-, Fn+F5 - Volume+ работают.

Теперь надо добавить скрипт в автозагрузку. Но так как номер event имеет свойство иногда меняться (например, в случае подключения новых устройств ввода, таких как внешние клавиатуры, мыши, тв-тюнеры с дистанционным управлением, планшеты и т.п.) лучше вычислить номер event для input-kbd програмно. Идея заимствована у Игоря Кузнецова, автора патчей для поддержки тюнеров Beholder. Добавляем в /etc/rc.d/rc.local следующую строку:

C++
1
input-kbd -f /etc/input-kbd/SonyFnKeys `cat /proc/bus/input/devices | grep -4 '"Sony Vaio Keys"' | grep "H:" | awk '{ sub(/event/, "", $3); print $3}'` >/dev/null 2>&1
в данной строке выполняются следующие действия:

cat /proc/bus/input/devices - получение детального списка устройств
C++
1
2
3
4
5
ввода
grep -4 '"Sony Vaio Keys"' - получение из списка блока данных по данному устройству
grep "H:" - получение из блока данных строки - H: Handlers=kbd event8
awk '{ sub(/event/, "", $3); print $3}' - получение с помощью языка awk из строки H: Handlers=kbd event8 номера event, т.е. 8
> /dev/null 2>&1 - что это смотри здесь
2
 Аватар для BARS1991
23 / 15 / 0
Регистрация: 16.11.2009
Сообщений: 332
25.11.2011, 11:35  [ТС]
Программа Keyboard Test говорит, что у некоторых клавиш не Windows код, а BIOS код. как с ним работать?
0
872 / 448 / 35
Регистрация: 25.10.2011
Сообщений: 910
25.11.2011, 15:37
Как было правильно замечено, все зависит от модели ноутбука. У меня например FN определяется как 255, в некоторых моделях опредялется как NumLook, CapsLook и т.п.
Нашел в инете один пример, но на практике не применял:

Использование bioskey(...).
Описание
Оба имени обозначают одну функцию. Два произношения
нужны для совместимости с разными компиляторами.
bioskey передает флаг для BIOS_прерывания 0x14 -
- прерывание от клавиатуры. Значения flag:
0 - чтение значения ввода с клавиатуры из буфера
ввода. Ждет ввода, если буфер пуст.
1 - определение наличия значений нажатых клавиш
в буфере ввода от клавиатуры.
2 - чтение состояния клавиш типа 'shift'.
Использование
C++
1
2
3
#include <bios.h
int bioskey(int flag);
int _bios_keybrd (int flag);
Возвращаемое значение
Если flag=0, то возвращаемое значение является рас-
ширенным кодом клавиши. ASCII код клавиши находится
при этом в младшем байте, а скан-код ее - в старшем
байте. Если младший байт нулевой, то это не ASCII
код (это может быть стрелка или функциональная кла-
виша). Если flag=1, то 0 возвращается при отсутствии
ввода от клавиатуры в буфере ввода; в противном слу-
чае возвращается расширенный код клавиши. При этом,
код клавиши остается в буфере ввода и еще доступен
для чтения. Если flag=2, то возвращаемое значение ин-
формирует о состоянии 'shift' клавиш:
0x01 - нажата правая shift клавиша
0x02 - нажата левая shift клавиша
0x04 - нажата клавиша Ctrl
0x08 - нажата клавиша Alt
0x10 - включен ключ Scrolllock
0x20 - включен ключ Numlock
0x40 - включен ключ Capslock
0x80 - включен ключ Ins
Пример
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <bios.h>
#include <stdio.h>
         main ()
         {
           int key, shift;
           int lastshift = 0;
           while (1)
           {
             shift=bioskey(2);
             if(shift!=lastshift)
             /* Если изменился shift статус*/
               printf("shift = 0x%02x\n", shift);
               /* Если клавиша нажата*/
             if (bioskey(1))
             {         
             /* Читаем клавишу*/
               Key=bioskey(0);
               if ((Key & 0xFF)== 'q') break;
               printf("Клавиша = 0x%04x\n", Key);
             }
             lastshift=shift;
           }
         }


Можно методом проб и ошибок проверять, но таким образом создать, что-то универсальное трудно.

Добавлено через 11 минут
Скорее всего нужно сохранять комбинации как горячие клавиши и работать в этом направлении. Но опять же, ввиду различий, возможно необходимо производить "калиблировку" пользователем, перед действием программы.
2
 Аватар для BARS1991
23 / 15 / 0
Регистрация: 16.11.2009
Сообщений: 332
25.11.2011, 19:35  [ТС]
Универсальность, мне не нужна. Я буду писать под свою модель ноутбука, установлю вместо стандартной

Добавлено через 28 минут
Что-то Builder не хочет работать с bios.h. Выдает такую ошибку:
C++
1
[ILINK32 Error] Error: Unresolved external '__bios_keybrd' referenced from C:\USERS\BARS\DOCUMENTS\RAD STUDIO\PROJECTS\RELEASE\UNIT3.OBJ
Как заставить его работать?
0
872 / 448 / 35
Регистрация: 25.10.2011
Сообщений: 910
25.11.2011, 19:44
Цитата Сообщение от BARS1991 Посмотреть сообщение
Как заставить его работать?
В примере был указан bioskey, а вот если bios.h не грузится, значит просто библиотеки нет. Ибо использовался он во времена цветущих черных экранов и сейчас ее могли посчитать просто устаревшей.
Цитата Сообщение от BARS1991 Посмотреть сообщение
Я буду писать под свою модель ноутбука, установлю вместо стандартной
Тогда предлагаю просто определить эти коды. По этой ссылке можно найти самые "человечные" способы.
0
 Аватар для BARS1991
23 / 15 / 0
Регистрация: 16.11.2009
Сообщений: 332
25.11.2011, 19:52  [ТС]
Дополнительные клавиши не имеют ASCII кода. Все функции возвращают на них число 255. Через Keyboard Test выяснил, что они имеют BIOS код. Только непонятно, как с ним работать. bios.h к проекту подключил, а билдер работать отказывается...
0
872 / 448 / 35
Регистрация: 25.10.2011
Сообщений: 910
25.11.2011, 20:17
Цитата Сообщение от BARS1991 Посмотреть сообщение
Все функции возвращают на них число 255.
А можно узнать, что вас в этом не устраивает?
0
 Аватар для BARS1991
23 / 15 / 0
Регистрация: 16.11.2009
Сообщений: 332
25.11.2011, 20:23  [ТС]
Не устраивает то, что кнопки разные, а возвращаемый результат - 255
0
872 / 448 / 35
Регистрация: 25.10.2011
Сообщений: 910
25.11.2011, 20:51
Цитата Сообщение от BARS1991 Посмотреть сообщение
Не устраивает то, что кнопки разные, а возвращаемый результат - 255
Какие кнопки? Если вы о комбинациях типа FN+R, то у меня возвращение 255 идет только после возвращения значения R. Либо если просто отпустить кнопку FN.
0
 Аватар для BARS1991
23 / 15 / 0
Регистрация: 16.11.2009
Сообщений: 332
25.11.2011, 23:20  [ТС]
Кнопки регулировки яркости, кнопки управления BlueTooth, Wi-Fi, энергосбережением...

Добавлено через 35 минут
Нормально определяются только мультимедийные клавиши и регулировка громкости (регулировка громкости и с "Fn" и без него определяется)
0
872 / 448 / 35
Регистрация: 25.10.2011
Сообщений: 910
26.11.2011, 00:00
C++
1
2
3
4
5
6
7
8
9
10
11
void __fastcall TForm1::KeyProccess(TWMKey &Msg)
{
   Edit1->Text = Msg.CharCode;
   Edit2->Text = Msg.KeyData;
}
//---------------------------------------------------------------------------
private:
   BEGIN_MESSAGE_MAP
      MESSAGE_HANDLER(WM_KEYDOWN,TWMKey,KeyProccess)
   END_MESSAGE_MAP(TForm);
// ...
Снизу скрин программы с информацией о кнопке "Включить блютуз" на моем ноутбуке. По иронии ALT+PrintScreen не скушала

А хочешь знать как заканчивается эта история?

в MSDN.
About Keyboard Input
MapVirtualKey function
About Hot Key Controls
GetKeyboardState function
GetKeyState function
Using Keyboard Input
Изображения
 
1
 Аватар для BARS1991
23 / 15 / 0
Регистрация: 16.11.2009
Сообщений: 332
26.11.2011, 01:54  [ТС]
У меня ваш код ничего не делает, коды клавиш не считывает...
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
26.11.2011, 02:13
ага , у меня еще и гламурный :
Миниатюры
Работа с дополнительными клавишами клавиатуры...  
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
26.11.2011, 02:13
Помогаю со студенческими работами здесь

Работа с клавишами.
Подскажите пожалуйста. Мне нужно чтоб через определённое время нажалась кнопка.?

Работа с клавишами в delphi
Всех приветствую. Есть вот какая задача: Что бы при нажатии f8, постоянно нажималась пробел автоматически. А когда ещё раз нажать f8,...

Работа клавишами в гаджетах
Добрый день! Помогите разобраться, как использовать (в данном случае) клавишу enter в stringgadget. Задача: есть две строки, написав...

Работа с горячими клавишами
Добрый день. Есть такая проблема.я в приложении регистрирую горячие клавиши, по нажатию которых открываются окна/выполняются функции. ...

Работа с клавишами стрелка и т.д
Народ, помогите. Как написать программу типа if(&quot;нажата клавиша вверх&quot;) { cout &lt;&lt; 500; } else if(&quot;нажата...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru