|
500 / 474 / 63
Регистрация: 26.01.2011
Сообщений: 2,033
|
||||||
Хук клавиатуры - как получить код нажатой клавиши29.06.2012, 21:39. Показов 24630. Ответов 20
Метки нет (Все метки)
Господа делаю хук на клавиатуру,вроде бы и работает(при нажатии на клавишу показывает),но есть одно но !!! не могу получить код нажатой клавиши , вот код -
0
|
||||||
| 29.06.2012, 21:39 | |
|
Ответы с готовыми решениями:
20
Как определить код нажатой клавиши? Получить код нажатой клавиши без ожидания ввода в консоли прога, которая по нажатой клавише выводит ascii - код символа это клавиши или scan - код самой клавиши. |
|
60 / 60 / 7
Регистрация: 16.05.2010
Сообщений: 632
|
|
| 29.06.2012, 21:57 | |
|
GetAsyncKeyState возвращает значение SHORT,может поэтому не получается
0
|
|
|
Супер-модератор
|
|
| 29.06.2012, 22:31 | |
|
Игорь с++, а что ты передаешь в GetAsyncKeyState при втором вызове, можно уточнить?
wParam = WM_KEYUP, ты сам в этом убедился, и что ты ожидаешь от функции, которой надо передавать виртуальный код клавиши? Приводи lParam к типу LPKBDLLHOOKSTRUCT, вытягивай из структуры vkCode, и передавай в GetAsyncKeyState, тогда будет работать...
2
|
|
|
500 / 474 / 63
Регистрация: 26.01.2011
Сообщений: 2,033
|
|
| 29.06.2012, 23:22 [ТС] | |
|
0
|
|
|
Супер-модератор
|
||||||
| 29.06.2012, 23:30 | ||||||
|
Дам пару ссылок, чтобы было с чего начинать разбираться. Ты ставишь низкоуровневый хук на клавиатуру, следовательно, callback-функция должна быть вот такой: LowLevelKeyboardProc callback function , откуда быстро выясняется, что в wParam содержится идентификатор сообщения от клавиатуры, его нельзя передавать в GetAsyncKeyState. А вот в lParam - указатель на структуру типа KBDLLHOOKSTRUCT, в которой есть несколько полей, в том числе и нужное тебе: vkCode. Все, что тебе надо - вытянуть это поле из структуры:
1
|
||||||
|
500 / 474 / 63
Регистрация: 26.01.2011
Сообщений: 2,033
|
|
| 30.06.2012, 01:21 [ТС] | |
|
Спасибо намного понятней стало!
Добавлено через 1 час 17 минут Блин столько перелопатил , и не могу извлеч код клавиши , а затем ловлю себя на мысли , что я это всё делал не глобально,а для своего окна (которого нет) , и читаю доку для глобального хука пишем dll , ну как говорится с новыми силами в бой теперь полез копать по этой теме ээээээээээх !!!
0
|
|
|
Супер-модератор
|
||||||
| 30.06.2012, 03:53 | ||||||
Сообщение было отмечено как решение
Решение
На фиг DLL не нужна при установке WH_KEYBOARD_LL. Хочешь убедиться?
![]()
12
|
||||||
|
500 / 474 / 63
Регистрация: 26.01.2011
Сообщений: 2,033
|
||
| 30.06.2012, 12:28 [ТС] | ||
|
Да действительно раотает спасибо большое!!!Если позволите один вопрос.
0
|
||
|
500 / 474 / 63
Регистрация: 26.01.2011
Сообщений: 2,033
|
||
| 30.06.2012, 15:21 [ТС] | ||
|
Спасибо просто думал , что это фиксированное название
Добавлено через 1 минуту ![]() СПАИБО ОГРОМНОЕ ЗА ВСЕ РАЗЪЯСНЕНИЯ
0
|
||
|
1 / 1 / 0
Регистрация: 05.09.2013
Сообщений: 45
|
|||||||||||
| 18.02.2014, 13:24 | |||||||||||
|
Оооо я тоже хочу поучаствовать =)
Заметил одну штуку. Если использовать тип хука WH_KEYBOARD вместо WH_KEYBOARD_LL то ДЛЛка таки нужна. Чем они отличаются? Способом отлова клавиши (до помещения в очередь сообщений и после)? Вдохновленный темой разработал приложение что-то вроде антибоскея, что и прилагаю. Прошу кидать в меня тухлыми помидорами, гнилыми яйцами и всячески критиковать. Файл keys.h
1
|
|||||||||||
|
2838 / 1647 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
|
||
| 18.02.2014, 14:13 | ||
|
WH_KEYBOARD_LL работает до добавления сообщения в очередь в контексте потока, установившего хук. Логично предположить, что DLL не нужна, но в MSDN такого что-то не видно (хотя раньше вроде было).
0
|
||
|
1 / 1 / 0
Регистрация: 05.09.2013
Сообщений: 45
|
|
| 18.02.2014, 14:47 | |
|
0
|
|
|
14 / 14 / 5
Регистрация: 05.10.2011
Сообщений: 223
|
||||||
| 09.07.2015, 11:16 | ||||||
|
проверил код от volvo
в результате получаю на каждое нажатие клавиши по два сообщения. На сколько я понимаю это следствие обработки сообщения нажатия и отжатия клавиши. Почитал MSDN, по функции TranslateMessage(). Как я понимаю, она служит для объединения события нажатия и отжатия клавиши в одно событие - была нажита клавиша. Но на практике в консоль получаю все же 2 сообщения. Так в чем же дело? работает ли : Добавлено через 3 часа 36 минут Как отметил Somebody,
0
|
||||||
|
2838 / 1647 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
|
|
| 09.07.2015, 18:05 | |
|
TranslateMessage по потоку сообщений генерирует сообщения WM_CHAR и WM_DEADCHAR. Они нужны, если программу интересуют вводимые символы и не интересует способ ввода (символы с таким же успехом могут быть введены и не с клавиатуры). Если интересуют клавиши и неважно, что на них (Q/Й/A/...), то TranslateMessage ничем не поможет.
Добавлено через 9 минут Хук работает до добавления сообщения в очередь потока, куда оно должно в итоге прийти. В потоке, поставившем хук, сообщения получать надо - среди них те, которые как раз этот хук и вызывают.
0
|
|
|
14 / 14 / 5
Регистрация: 05.10.2011
Сообщений: 223
|
|
| 10.07.2015, 06:27 | |
|
volvo, Somebody, еще есть такой вопрос: почему при работе этого кода появляются проблемы при нажатии клавиши pause/brake (VK_PAUSE = 0x13): обработка сообщений клавиатуры останавливается, у меня, на 5-6 секунд?
0
|
|
|
2838 / 1647 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
|
|
| 10.07.2015, 17:34 | |
|
Начнём с того, что, согласно документации в нынешнем её состоянии, хук должен быть в DLL. Так что хук без DLL в общем-то не обязан работать в относительно новых виндах.
Pause, наверное, нажимаешь в консоли самой проги, которая поставила хук, - она, как положено, останавливается. 5-6 секунд только потому, что где-то в системе таймаут стоит, что если хук тормозит, то нажатия клавиш мимо него проходят, иначе бы повисло совсем.
0
|
|
|
0 / 0 / 0
Регистрация: 31.05.2016
Сообщений: 1
|
|
| 31.05.2016, 22:55 | |
|
подскажите, пожалуйста, как будет выглядеть хук без DLL для клавиш мыши?
0
|
|
|
0 / 0 / 0
Регистрация: 02.05.2019
Сообщений: 3
|
|
| 19.05.2021, 23:39 | |
|
Здравствуйте! Наткнулся на ваш ответ. Подскажите дураку, пожалуйста, в какой файл этот участок кода нужно вставить для 17 студии?
0
|
|
|
0 / 0 / 0
Регистрация: 02.05.2019
Сообщений: 3
|
|
| 20.05.2021, 10:18 | |
|
volvo, Здравствуйте! Наткнулся на ваш ответ. Подскажите дураку, пожалуйста, в какой файл этот участок кода нужно вставить для 17 студии?
0
|
|
| 20.05.2021, 10:18 | |
|
Помогаю со студенческими работами здесь
20
Как передать переменной значение нажатой клавиши с клавиатуры? Как получить имя нажатой клавиши Код нажатой клавиши вывести как знак (буква, цифра) Как получить код нажатой клавиши Как получить код нажатой клавиши в Lotus Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога
Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
|
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
|
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога
В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
|
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|
|
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога
Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
|
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
|
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования.
Часть библиотеки BedvitCOM
Использованы. . .
|
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога
SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
|