Ребята из pls мне нужна помощь в исправлении того, что я сделал неправильно в своем коде. Я запускал код, и ошибок нет, но когда я пытаюсь выполнить комбинацию, он не делает то, что он должен делать (что «ключ А заблокирован»), поэтому мне нужна ваша помощь быстро, потому что мне нужно отправить это к понедельнику. Вот код:Как правильно использовать клавиатурные крючки, чтобы нажать комбинацию клавиш, чтобы заблокировать ключ, и снова нажать его, чтобы разблокировать его в C++.
#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <Windows.h>
#include <sstream>
#define _WIN32_WINNT 0x050
using namespace std;
string intToHexString(int intValue) {
string hexStr;
/// integer value to hex-string
stringstream sstream;
sstream << "0x" << hex << (int)intValue;
hexStr = sstream.str();
sstream.clear(); //clears out the stream-string
return hexStr;
}
LRESULT CALLBACK LowLevelKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam) {
BOOL locked = FALSE;
PKBDLLHOOKSTRUCT hookStruct;
if (nCode == HC_ACTION) {
switch (wParam)
{
case WM_KEYDOWN:
case WM_SYSKEYDOWN:
case WM_KEYUP:
case WM_SYSKEYUP:
hookStruct = (PKBDLLHOOKSTRUCT)lParam;
/**
* this is where the problem is
*/
//ctrl+alt+n
if (hookStruct->vkCode == 0x11 && hookStruct->vkCode == 0x12 && hookStruct->vkCode == 0x4E
&& !locked) {
locked = TRUE;
if (hookStruct->vkCode == 0x41) {
cout << "The key A is blocked" << endl;
return 1;
}
}
else if (hookStruct->vkCode == 0x11 && hookStruct->vkCode == 0x12 && hookStruct->vkCode == 0x4E) {
locked = FALSE;
BlockInput(locked);
cout << "The key is unblocked" << endl;
}
else {
return CallNextHookEx(NULL, nCode, wParam, lParam);
}
}
}
return CallNextHookEx(NULL, nCode, wParam, lParam);
}
int main()
{
char key_pressed;
int ascii_value;
string key_press_special;
HHOOK hhkLowLevelKybd = SetWindowsHookEx(WH_KEYBOARD_LL, LowLevelKeyboardProc, 0, 0);
cout << "press any key to see it's Character, ASCII and Scan Code" << endl;
cout << "Press ESC key to Exit" << endl;
while(1) {
key_pressed = _getch();
if (key_pressed == 13) {
key_press_special = "Enter";
cout << "Character: " << key_press_special << endl;
}
else if (key_pressed == 9) {
key_press_special = "Tab";
cout << "Character: " << key_press_special << endl;
}
else if (key_pressed == 27) {
key_press_special = "ESC";
cout << "Character: " << key_press_special << endl;
}
else {
cout << "Character: " << key_pressed << endl;
}
ascii_value = key_pressed;
cout << "The ASCII Value is: " << ascii_value << endl;
int scan = MapVirtualKey(ascii_value, 0);
string scanCode = intToHexString(scan);
cout << "Scan Code is: " << scanCode << endl;
if (key_pressed == 27) {
break;
}
else {
continue;
}
}
UnhookWindowsHookEx(hhkLowLevelKybd);
return 0;
}
Pls не стесняется критиковать, когда вы видите ошибку, я все еще участвую.
*** Я побежал код и нет никаких ошибок или ошибок, но когда я попробовать комбинацию, он не делает то, что это, предполагают, чтобы сделать ** * Разве это не определение ошибки? – drescherjm
*** hookStruct-> vkCode == 0x11 && hookStruct-> vkCode == 0x12 && hookStruct-> vkCode == 0x4E *** Это никогда не может быть правдой. – drescherjm
Извините, не знаю, было ли это определение –