我正在尝试了解Low Level Hook。我想改变用户的输入。像这样的东西,当用户按a然后按w时,输出为ă。我的解决方案是:
问题是:它会在退格之前显示屏幕上的w字符,我不希望这样。有什么解决方案可以在用户输入时隐藏w字符吗?
示例:这是屏幕上发生的事情
发生了什么:a - > aw - > a - > - > A
我想:a - > A
这是我的HookProcedure
LRESULT CALLBACK InternalKeyboardHookCallback(int code, WPARAM wparam, LPARAM lparam){
KBDLLHOOKSTRUCT *pKeyboardStruct = (KBDLLHOOKSTRUCT *)lparam;
if(wparam == WM_KEYUP){
if(pKeyboardStruct->vkCode==0x41){
state = true;
}
if((pKeyboardStruct->vkCode==0x57)&&(state)){
SendInput(0x08);
SendInput(0x08);
SendInputUnicode(0x0103);
state = false;
}
}
return CallNextHookEx(hookKeyboard, code, wparam, lparam);
}
这是SendInput和SendInputUnicode
void SendInputUnicode(int wScan){
INPUT input[2];
memset(input, 0, sizeof(input));
input[0].type = INPUT_KEYBOARD;
//Input UNICODE
input[0].ki.wVk = 0; // VK_PACKET
input[0].ki.dwFlags = 4;//Send Unicode
input[0].ki.wScan = wScan;
input[0].ki.time = 0;
input[0].ki.dwExtraInfo = 0;
input[1].ki.wVk = 0; // VK_PACKET
input[1].ki.wScan = wScan;
input[1].ki.dwFlags = KEYEVENTF_KEYUP|4;
input[1].ki.time = 0;
input[1].ki.dwExtraInfo = 0;
SendInput(2,input,sizeof(INPUT));
}
void SendInput(int wScan){
INPUT input[2];
memset(input, 0, sizeof(input));
input[0].type = INPUT_KEYBOARD;
//Input UNICODE
input[0].ki.wVk = wScan; // VK_PACKET
input[0].ki.dwFlags = 0;//Send Unicode
input[0].ki.wScan = 0;
input[0].ki.time = 0;
input[0].ki.dwExtraInfo = 0;
input[1].ki.wVk = wScan; // VK_PACKET
input[1].ki.wScan = 0;
input[1].ki.dwFlags = KEYEVENTF_KEYUP;
input[1].ki.time = 0;
input[1].ki.dwExtraInfo = 0;
SendInput(2,input,sizeof(INPUT));
}