|
@@ -0,0 +1,54 @@
|
|
|
|
+//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 для получения названия клавиши.
|
|
|
|
+//
|
|
|
|
+//После внесения этих изменений, код должен корректно считывать и выводить названия клавиш при их нажатии.
|