[英]global low level keyboard hook being called when SendInput is made. how to prevent it?
[英]SendInput can't send keyboard inputs when the LowLevelKeyboardProc hook is enabled on Windows
我制作了一个程序,它将使用 WinAPI 阻止 Windows 上的每个键盘按钮,并使用 SendInput 函数发送一个字符串,但我找不到在启用钩子时让 SendInput 发送键盘键的方法。 这是我的代码:
#include <Windows.h>
#include <vector>
#include <string>
HHOOK kHook;
KBDLLHOOKSTRUCT kbdStruct;
LRESULT CALLBACK LowLevelKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam) {
kbdStruct = *((KBDLLHOOKSTRUCT*)lParam);
if (nCode == HC_ACTION)
{
if (kbdStruct.flags != LLKHF_INJECTED)
{
switch (wParam)
{
case WM_KEYDOWN:
return -1;
case WM_SYSKEYDOWN:
return -1;
}
return CallNextHookEx(kHook, nCode, wParam, lParam);
}
}
}
void sendString(std::wstring message)
{
for (auto ch : message)
{
Sleep(250);
std::vector<INPUT> vec;
INPUT input = { 0 };
input.type = INPUT_KEYBOARD;
input.ki.dwFlags = KEYEVENTF_UNICODE;
input.ki.wScan = ch;
vec.push_back(input);
input.ki.dwFlags |= KEYEVENTF_KEYUP;
vec.push_back(input);
SendInput(vec.size(), vec.data(), sizeof(INPUT));
}
}
int main()
{
kHook = SetWindowsHookExW(WH_KEYBOARD_LL, LowLevelKeyboardProc, NULL, 0);
MSG msg;
while (GetMessageW(&msg, NULL, 0, 0))
{
sendString(L"Some String");
}
}
不要吞下所有键盘输入(这显然与您发送一些键盘输入的意图相冲突),而是尝试过滤输入。
现在,您的键盘钩子会停止所有输入,包括您在sendString
中发送的消息。 更改您的键盘挂钩,以便它了解允许传递的消息。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.