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