СазоноваАА 9 mesi fa
parent
commit
e81cd8d827
1 ha cambiato i file con 48 aggiunte e 14 eliminazioni
  1. 48 14
      hOOOKID/hOOOKID.cpp

+ 48 - 14
hOOOKID/hOOOKID.cpp

@@ -1,20 +1,54 @@
-// hOOOKID.cpp : Этот файл содержит функцию "main". Здесь начинается и заканчивается выполнение программы.
-//
+//7.Получение кода клавиши в формате ASCII и использованием Windows HOOK.Название клавиши выводить в MessageBox
+#include <stdio.h>
+#include <stdlib.h>
+#include <windows.h>
 
-#include <iostream>
+#define BUFFER_SIZE 256
 
-int main()
+LRESULT CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
 {
-    std::cout << "Hello World!\n";
+    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);
 }
 
-// Запуск программы: CTRL+F5 или меню "Отладка" > "Запуск без отладки"
-// Отладка программы: F5 или меню "Отладка" > "Запустить отладку"
+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);
+    }
 
-// Советы по началу работы 
-//   1. В окне обозревателя решений можно добавлять файлы и управлять ими.
-//   2. В окне Team Explorer можно подключиться к системе управления версиями.
-//   3. В окне "Выходные данные" можно просматривать выходные данные сборки и другие сообщения.
-//   4. В окне "Список ошибок" можно просматривать ошибки.
-//   5. Последовательно выберите пункты меню "Проект" > "Добавить новый элемент", чтобы создать файлы кода, или "Проект" > "Добавить существующий элемент", чтобы добавить в проект существующие файлы кода.
-//   6. Чтобы снова открыть этот проект позже, выберите пункты меню "Файл" > "Открыть" > "Проект" и выберите SLN-файл.
+    // Удаление HOOK
+    UnhookWindowsHookEx(hKeyboardHook);
+
+    return 0;
+}
+//В этом исправленном коде мы используем функцию MapVirtualKey для преобразования кода клавиши в скан - код.Затем мы передаем полученный скан - код в функцию GetKeyNameTextA для получения названия клавиши.
+//
+//После внесения этих изменений, код должен корректно считывать и выводить названия клавиш при их нажатии.