C++ 键盘钩子

#include <windows.h>
#pragma comment(lib, "User32.lib")
HHOOK g_hKeyboard = NULL;
#pragma data_seg("MySec")
#pragma data_seg()
#pragma comment(linker,"/section:MySec,RWS")
HHOOK g_Hook;
//此处为钩子过程函数,与方案一中的钩子过程函数相同,不再重复,其中函数名改为KeyboardHookProc
LRESULT WINAPI KeyboardHookProc(int nCode,WPARAM wParam,LPARAM lParam)
{
    LPKBDLLHOOKSTRUCT pKB = (LPKBDLLHOOKSTRUCT)lParam;
    BOOL bKeyToShield = FALSE;
    if(nCode == HC_ACTION){
        switch(wParam){
        case WM_KEYDOWN:
        case WM_SYSKEYDOWN:
        case WM_KEYUP:
        case WM_SYSKEYUP:{
            bKeyToShield = (pKB->vkCode == VK_LWIN) || (pKB->vkCode == VK_RWIN)||                    /* win键*/
                (pKB->vkCode == VK_ESCAPE)    || (pKB->vkCode == VK_RETURN) ||                    /* esc键*/
                ((pKB->vkCode == VK_TAB) && ((pKB->flags & LLKHF_ALTDOWN) != 0))||        /* alt+tab*/
                ((pKB->vkCode == VK_ESCAPE) && ((pKB->flags & LLKHF_ALTDOWN) != 0))||        /* alt+esc*/
                ((pKB->vkCode == VK_ESCAPE) && ((GetKeyState(VK_CONTROL) & 0x8000) != 0));    /* ctrl+tab*/
            break;
        }
        default:
            break;
        }
    }
    return(bKeyToShield?TRUE:CallNextHookEx(g_Hook,nCode,wParam,lParam));
}

void SetHook()//安装钩子
{
    g_hKeyboard = SetWindowsHookEx(WH_KEYBOARD_LL, KeyboardHookProc, GetModuleHandle(L"KeyboardHook"), 0);    
}

void UnHook()                //卸载钩子
{
    UnhookWindowsHookEx(g_hKeyboard);
}

/******************************************dll END******************************************/

 

转载于:https://www.cnblogs.com/qq76211822/p/5110851.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值