键盘钩子

#include <windows.h>

#include "hook.h"

 

 

typedef LRESULT    (CALLBACK * HOOKPROC)(int code, WPARAM wParam, LPARAM lParam);

typedef HHOOK      (WINAPI * SetWindowsHookFunc)(int, HOOKPROC, HINSTANCE, DWORD);

typedef LRESULT    (WINAPI * UnhookWindowsHookFunc)(HHOOK);

 

typedef struct

{

    DWORD vkCode;

    DWORD scanCode;

    DWORD flags;

    DWORD time;

    ULONG_PTR dwExtraInfo;

} KBDLLHOOKSTRUCT, *PKBDLLHOOKSTRUCT;

 

#define WH_KEYBOARD_LL           20

#define HC_ACTION        0

 

extern HINSTANCE g_hInstance;

 

HHOOK m_hHook;

 

LRESULT CALLBACK LLKeyboardHookCallbackFunction(int nCode, WPARAM wParam, LPARAM lParam)

{   

     printf("HOOK/n");

 

     if(nCode >= HC_ACTION) {

         if((wParam == WM_KEYDOWN) || (wParam == WM_SYSKEYDOWN)) {            

                   if(((KBDLLHOOKSTRUCT*)lParam)->vkCode == VK_TVOLUMEUP)  {

                       printf("Hook VK_TVOLUMEUP/n");

                       return TRUE;

                   }                          

         }   

     }

    

     return FALSE;

}

 

int DeactivateKBHook(void)

{

     BOOL ret = FALSE;

 

    //coredll.dll获取UnhookWindowsHookEx函数

    HMODULE hLibrary = LoadLibrary(_T("coredll.dll"));

    if(hLibrary == NULL)

    {

        goto Exit;

    }

 

    UnhookWindowsHookFunc pfnUnhookWindowsHook = (UnhookWindowsHookFunc)GetProcAddress(hLibrary, _T("UnhookWindowsHookEx"));

    if(pfnUnhookWindowsHook == NULL)

    {

         goto Exit;

     }

 

     //调用UnhookWindowsHookEx解除按键钩子

     pfnUnhookWindowsHook(m_hHook);

 

     ret = TRUE;

 

Exit:

     if (hLibrary != NULL)

     {

         FreeLibrary(hLibrary);

     }

 

    return ret;   

 

}

 

int ActivateKBHook(void)

{   

     BOOL ret = FALSE;

 

    //coredll.dll获取SetWindowsHookExW函数

    HMODULE hLibrary = LoadLibrary(_T("coredll.dll"));

    if(hLibrary == NULL)

    {

        goto Exit;

    }

 

    SetWindowsHookFunc pfnSetWindowHook = (SetWindowsHookFunc)GetProcAddress(hLibrary, _T("SetWindowsHookExW"));

    if(pfnSetWindowHook == NULL)

    {

         goto Exit;

     }

 

     //调用SetWindowsHookExW注册按键钩子

     m_hHook = pfnSetWindowHook(WH_KEYBOARD_LL, LLKeyboardHookCallbackFunction, g_hInst, 0);

    if(m_hHook == NULL)

    {

        goto Exit;

    }

 

     ret = TRUE;

 

Exit:

     if (hLibrary != NULL)

     {

         FreeLibrary(hLibrary);

     }

 

    return ret;

 

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值