Я написал эту динамическую библиотеку для установки ловушки, но для правильной работы ловушки программа требует, чтобы она была в цикле while.Есть ли способ, которым я мог бы установить хук без использования цикла while и иметь возможность удалить его аналогично моему методу «unlock», показанному ниже?Позже библиотека будет использоваться в программе на C #, и ее цель - блокировать любые буквы, поступающие с клавиатуры, и пропускать только цифры.Спасибо
#pragma once
#include "Header.h"
#include <iostream>
#include <stdio.h>
#include <tchar.h>
#include <windows.h>
#include <conio.h>
#include <stdio.h>
#include <fstream>
#include <ShlObj.h>
#define _WIN32_WINNT 0x050
HHOOK hhkLowLevelKybd = NULL;
LRESULT CALLBACK LowLevelKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
{
BOOL duckx = FALSE;
BOOL ducky = FALSE;
if (nCode == HC_ACTION)
{
switch (wParam)
{
case WM_KEYDOWN:
case WM_SYSKEYDOWN:
case WM_KEYUP:
case WM_SYSKEYUP:
PKBDLLHOOKSTRUCT p = (PKBDLLHOOKSTRUCT)lParam;
if ((duckx = (p->vkCode >= 0x3a)) || (duckx = (p->vkCode <= 0x28 && p->vkCode > 0x08))) {
break;
}
break;
}
}
return(duckx ? 1 : CallNextHookEx(NULL, nCode, wParam, lParam));
}
void lock() {
HHOOK hhkLowLevelKybd = SetWindowsHookEx(WH_KEYBOARD_LL, LowLevelKeyboardProc, 0, 0);
}
void unlock() {
UnhookWindowsHookEx(hhkLowLevelKybd);
}
myClass::myClass(int x) {
if (x == 1) {
lock();
MSG msg;
while (!GetMessage(&msg, NULL, NULL, NULL)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
if (x == 0) {
unlock();
MSG msg;
while (!GetMessage(&msg, NULL, NULL, NULL)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
}