C++ Windows上键盘拦截

 键盘捕获代码:

#include <iostream>
#include <windows.h>

// 键盘钩子回调函数
LRESULT CALLBACK KeyboardHookCallback(int nCode, WPARAM wParam, LPARAM lParam)
{
    if (nCode == HC_ACTION)
    {
        KBDLLHOOKSTRUCT* pKeyboardStruct = (KBDLLHOOKSTRUCT*)lParam;
        
        // 检测按下或释放事件
        if (wParam == WM_KEYDOWN || wParam == WM_SYSKEYDOWN)
        {
            // 获取按键码和扫描码
            DWORD vkCode = pKeyboardStruct->vkCode;
            DWORD scanCode = pKeyboardStruct->scanCode;

            // 打印按下的按键信息
            std::cout << "Key down - VK code: " << vkCode << ", Scan code: " << scanCode << std::endl;
            // 如果是拦截,可加上如下代码
            // return true;
        }
        else if (wParam == WM_KEYUP || wParam == WM_SYSKEYUP)
        {
            // 获取按键码和扫描码
            DWORD vkCode = pKeyboardStruct->vkCode;
            DWORD scanCode = pKeyboardStruct->scanCode;

            // 打印释放的按键信息
            std::cout << "Key up - VK code: " << vkCode << ", Scan code: " << scanCode << std::endl;
            // 如果是拦截,可加上如下代码
            // return true;
        }
    }

    // 将事件传递给下一个钩子或默认过程
    return CallNextHookEx(NULL, nCode, wParam, lParam);
}

int main()
{
    // 安装全局键盘钩子
    HHOOK hKeyboardHook = SetWindowsHookEx(WH_KEYBOARD_LL, KeyboardHookCallback, NULL, 0);

    if (hKeyboardHook == NULL)
    {
        std::cerr << "Failed to install keyboard hook!" << std::endl;
        return -1;
    }

    // 消息循环,等待键盘事件
    MSG message;
    while (GetMessage(&message, NULL, 0, 0))
    {
        TranslateMessage(&message);
        DispatchMessage(&message);
    }

    // 卸载键盘钩子
    UnhookWindowsHookEx(hKeyboardHook);

    return 0;
}

如果是键盘拦截,需要将KeyboardHookCallback函数事件进行处理,接收消息以后直接返回,而不是将事件传递给下一个钩子或默认过程。

如果是仅仅拦截某个进程键盘事件,只需要修改SetWindowsHookEx第3、4个参数即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值