c++实现键盘hook

c++实现键盘hook

  1. 项目中用到监控键盘事件,但是,有一次自己的程序被其他置顶程序把按键事件给过滤了,所以需要添加监控键盘钩子的方法,代码样例如下:
cpp 复制代码
#include <iostream>
#include <Windows.h>

// 全局键盘钩子回调函数
LRESULT CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam) {
    if (nCode >= 0) {
        if (wParam == WM_KEYDOWN) {
            KBDLLHOOKSTRUCT* kbdData = reinterpret_cast<KBDLLHOOKSTRUCT*>(lParam);
            int keyCode = kbdData->vkCode;

            // 在此处处理按键事件,例如输出按下的键码
            std::cout << "键码: " << keyCode << std::endl;
			// 过滤不想向下传递的按键,直接在这里return即可
			// return 1;
        }
    }

    // 调用下一个钩子,如果存在的话
    return CallNextHookEx(NULL, nCode, wParam, lParam);
}

int main() {
    // 注册全局键盘钩子
    HHOOK hook = SetWindowsHookEx(WH_KEYBOARD_LL, KeyboardProc, NULL, 0);

    if (hook == NULL) {
        std::cerr << "无法注册键盘钩子" << std::endl;
        return 1;
    }

    // 消息循环
    MSG msg;
    while (GetMessage(&msg, NULL, 0, 0)) {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }

    // 卸载钩子
    UnhookWindowsHookEx(hook);

    return 0;
}
相关推荐
星火开发设计15 小时前
C++ multimap 全面解析与实战指南
java·开发语言·数据结构·c++·学习·知识
李日灐15 小时前
C++STL:deque、priority_queue详解!!:详解原理和底层
开发语言·数据结构·c++·后端·stl
羑悻的小杀马特15 小时前
etcd实战指南:从安装集群到C++封装,解锁分布式服务治理的“钥匙”
c++·分布式·etcd·集群
星火开发设计15 小时前
C++ deque 全面解析与实战指南
java·开发语言·数据结构·c++·学习·知识
点云SLAM15 小时前
C++设计模式之单例模式(Singleton)以及相关面试问题
c++·设计模式·面试·c++11·单例模式(singleton)
草莓熊Lotso15 小时前
Qt 信号与槽深度解析:从基础用法到高级实战(含 Lambda 表达式)
java·运维·开发语言·c++·人工智能·qt·数据挖掘
脏脏a16 小时前
C++ STL list 模拟实现:从底层链表到容器封装
开发语言·c++·stl·双链表
你怎么知道我是队长1 天前
C语言---typedef
c语言·c++·算法
带土11 天前
5. enum(枚举)关键字在C/C++中的作用
c语言·c++
驴友花雕1 天前
【花雕学编程】Arduino BLDC 之群体机器人协同探索
c++·单片机·嵌入式硬件·arduino bldc·群体机器人协同探索