MFC -- 键盘全局HOOK

Posted web安全工具库

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MFC -- 键盘全局HOOK相关的知识,希望对你有一定的参考价值。

一、新建一个DLL动态链接库

 

二、创建一个被exe文件调用的函数

BOOL sethook() 
       hk = SetWindowsHookEx(WH_KEYBOARD, //hook类型,键盘hook
              KeyboardProc, //回调函数
        hM, //第三方的注入dll,全局hook使用,句柄通过主函数获取
              0);//线程id,填0表示hook所有程序
       if (hk == NULL)//如果创建失败,弹出信息框
       
              
              return FALSE;
       
    return TRUE;

三、创建回调函数

HMODULE hM;
HHOOK hk;
//键盘hook的回调函数
LRESULT CALLBACK KeyboardProc(int code, WPARAM wParam, LPARAM lParam)

       char buf[256];
       if (wParam >= 'A' && wParam <= 'Z')
       
              sprintf_s(buf, "%c 被按下", wParam);
              OutputDebugStringA(buf);
       
       //钩子执行完后执行该函数
       return CallNextHookEx(hk, code, wParam, lParam);

四、通过主函数获取句柄

BOOL APIENTRY DllMain( HMODULE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved
                     )

    switch (ul_reason_for_call)
    
    case DLL_PROCESS_ATTACH:
    
        //dll被加载执行,初始化操作
        hM = hModule;
    
    break;
    case DLL_THREAD_ATTACH:
    case DLL_THREAD_DETACH:
    case DLL_PROCESS_DETACH:
    
        //dll被释放时调用
    
        break;
    
    return TRUE;

五、将函数导出

1、右击项目--添加--新建项

 

2、添加def文件

 

3、导出函数

LIBRARY

EXPORTS

sethook

4、通过PE软件查看导出函数

 

六、exe文件调用dll文件函数

1、声明lib文件位置

#pragma comment(lib,"hookdll.lib")

2、声明被调用函数

BOOL sethook();

3、调用函数

void CkeybhookDlg::OnBnClickedHook()

       BOOL re = sethook();
       if (!re)//如果创建失败,弹出信息框
       
              AfxMessageBox(L"HOOK失败");
              return;
       
       

七、项目源码下载:

关注编程有你公众号:回复20220115

欢迎关注公众号:编程有你

欢迎关注视频号:之乎者也吧

 

以上是关于MFC -- 键盘全局HOOK的主要内容,如果未能解决你的问题,请参考以下文章

delphi 键盘全局钩子

钩子编程(HOOK) 安装进程内键盘钩子

Keyboard Hook API函数 参数说明

MFC 全局键盘挂钩

火山中文编程 -- 实现键盘HOOK

想用VC++做个全局键盘改键,键盘钩子代码,详细怎么做。跪求代码。