123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- //7.Получение кода клавиши в формате ASCII и использованием Windows HOOK.Название клавиши выводить в MessageBox
- #include <stdio.h>
- #include <stdlib.h>
- #include <windows.h>
- #define BUFFER_SIZE 256
- LRESULT CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
- {
- if (nCode == HC_ACTION) {
- KBDLLHOOKSTRUCT* pKeyboardStruct = (KBDLLHOOKSTRUCT*)lParam;
- // Получение кода клавиши
- DWORD keyCode = pKeyboardStruct->vkCode;
- // Получение названия клавиши
- char keyName[256];
- UINT scanCode = MapVirtualKey(keyCode, MAPVK_VK_TO_VSC);
- GetKeyNameTextA(scanCode << 16, keyName, sizeof(keyName));
- // Вывод названия клавиши в MessageBox
- MessageBoxA(NULL, keyName, "Нажата клавиша", MB_OK);
- }
- // Передача управления следующему обработчику
- return CallNextHookEx(NULL, nCode, wParam, lParam);
- }
- int main()
- {
- system("chcp 1251");
- // Установка HOOK на клавиатуру
- HHOOK hKeyboardHook = SetWindowsHookEx(WH_KEYBOARD_LL, KeyboardProc, NULL, 0);
- if (hKeyboardHook == NULL) {
- printf("Ошибка при установке HOOK на клавиатуру\n");
- return 1;
- }
- // Цикл сообщений
- MSG msg;
- while (GetMessage(&msg, NULL, 0, 0) > 0) {
- TranslateMessage(&msg);
- DispatchMessage(&msg);
- }
- // Удаление HOOK
- UnhookWindowsHookEx(hKeyboardHook);
- return 0;
- }
- //В этом исправленном коде мы используем функцию MapVirtualKey для преобразования кода клавиши в скан - код.Затем мы передаем полученный скан - код в функцию GetKeyNameTextA для получения названия клавиши.
- //
- //После внесения этих изменений, код должен корректно считывать и выводить названия клавиш при их нажатии.
|