[英]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.