码迷,mamicode.com
首页 > 编程语言 > 详细

C++ 键盘钩子

时间:2016-01-07 20:00:58      阅读:243      评论:0      收藏:0      [点我收藏+]

标签:

#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******************************************/

 

C++ 键盘钩子

标签:

原文地址:http://www.cnblogs.com/qq76211822/p/5110851.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!