HOOK使用:全局键盘钩子

C++ HOOK实现全局键盘钩子的详细过程 1 简介 工具:VS2019 目的:写一个动态链接库(全局键盘钩子的注册和注销),然后在MFC项目中调用,MFC中有两个按钮,一个用于注册全局钩子,一个用于销毁全局钩子。注册全局钩子后,按下键盘的按钮,被按下的按钮会被记录到F:\key.txt 文件中。 2 编写DLL动态链接库 新建DLL项目 不要勾选【将解决方案和项目放在同一目录中(D)】 不要动建立好的项目中的其他文件 在项目中新建Keyboard.cpp文件 注意PROJECT_NAME这个宏,要和最后导出的DLL文件名一致 / 阅读详情

[cpp]  view plain copy
  1. // CatchKey.cpp : Defines the entry point for the DLL application.  
  2. //  
  3.   
  4. #define _WIN32_WINNT  0x0500        //设置系统版本,可以使用底层键盘钩子  
  5. #define WM_MY_SHORTS (WM_USER + 105)  
  6. #include "windows.h"  
  7. //全局变量   
  8. LPWORD      g_lpdwVirtualKey = NULL;    //Keycode 数组的指针   
  9. int         g_nLength = 0;          //Keycode 数组的大小   
  10. HINSTANCE   g_hInstance = NULL;     //模块实例句柄    
  11. HHOOK       g_hHook = NULL;         //钩子句柄   
  12. HWND        g_hWnd  = NULL;    
  13.   
  14.   
  15. BOOL APIENTRY DllMain(HANDLE hModule, DWORD  ul_reason_for_call,LPVOID lpReserved)   
  16. {    
  17.     //保存模块实例句柄   
  18.     g_hInstance = (HINSTANCE)hModule;   
  19.       
  20.     //在进程结束或线程结束时卸载钩子    
  21.     switch (ul_reason_for_call)   
  22.     {   
  23.     case DLL_PROCESS_ATTACH:   
  24.            break;    
  25.     case DLL_THREAD_ATTACH:  
  26.          break;       
  27.     case DLL_PROCESS_DETACH:   
  28.       case DLL_THREAD_DETACH:    
  29.         delete g_lpdwVirtualKey;    
  30.         if (g_hHook != NULL) UnhookWindowsHookEx(g_hHook);   
  31.         break;  
  32.     }  
  33.     return TRUE;  
  34. }    
  35.   
  36. LRESULT CALLBACK LowLevelKeyboardProc(int nCode, WPARAM wParam,LPARAM lParam)  
  37. {   
  38.     //判断是否是有效按键  
  39.     if (nCode >= HC_ACTION && wParam==WM_KEYDOWN)   
  40.     {   
  41.         BOOL bctrl = GetAsyncKeyState(VK_CONTROL)>>((sizeof(SHORT) *8)-1);     
  42.         KBDLLHOOKSTRUCT* pStruct = (KBDLLHOOKSTRUCT*)lParam;    
  43.         LPWORD tmpVirtualKey = g_lpdwVirtualKey;    
  44.         if (pStruct->vkCode == 80 && bctrl)    
  45.             PostMessage(g_hWnd,WM_MY_SHORTS,0,1);    
  46.         return TRUE;    
  47.     }   
  48.     //传给系统中的下一个钩子   
  49.     return CallNextHookEx(g_hHook, nCode, wParam, lParam);   
  50. }    
  51.   
  52.  _declspec(dllexport)  
  53. BOOL WINAPI StartCatch(LPWORD lpdwVirtualKey, int nLength,  HWND  pWnd)   
  54. {    
  55.     g_hWnd = pWnd;    
  56.     //如果已经安装键盘钩子则返回 FALSE    
  57.     if (g_hHook != NULL) return FALSE;  
  58.     //将用户传来的 keycode 数组保存在全局变量中   
  59.     g_lpdwVirtualKey = (LPWORD)malloc(sizeof(WORD) * nLength);   
  60.     LPWORD tmpVirtualKey = g_lpdwVirtualKey;   
  61.     for (int i = 0; i < nLength; i++)    
  62.     {   
  63.         *tmpVirtualKey++ = *lpdwVirtualKey++;   
  64.     }   
  65.     g_nLength = nLength;    
  66.     //安装底层键盘钩子    
  67.     g_hHook = SetWindowsHookEx(WH_KEYBOARD_LL, LowLevelKeyboardProc,  g_hInstance, NULL);    
  68.     if (g_hHook == NULL) return FALSE;   
  69.     return TRUE;    
  70. }    
  71.   
  72.  _declspec(dllexport)  
  73. BOOL WINAPI StopCatch()   
  74. {   //卸载钩子   
  75.     if (UnhookWindowsHookEx(g_hHook) == 0) return FALSE;   
  76.     g_hHook = NULL;   
  77.     return TRUE;   
  78.  }    


 

利用底层的键盘钩子 
LRESULT CALLBACK LowLevelKeyboardProc(int nCode, WPARAM wParam,LPARAM lParam)
来拦截 按键的时候

键盘的键按下和弹起时候会发生WM_KEYUP 和 WM_KEYDOWN两个消息,
这两个消息都会被hook,所以如此。

所以需要对 wParam 进行判断  是 WM_KEYDOWN 还是 WM_KEYUP

大白话,Android Studio安装及其资源分享(离线gradle配置) 安装AndroidAtudio,并通过aliClound镜像与离线gradle配置,来跳过相对“繁文缛节”的过程,直接实现开发 阅读详情

相关推荐

一步一步搭建S32K14x的AutoSar项目----MCAL工程创建及说明

一步一步搭建S32K14X的Autosar项目--MCAL工程创建及说明

wo580231的博客 2496

linux 中的hook

相信熟悉windows编程的高手们都知道,windows为我们提供一些api,这些api用于hook 键盘,鼠标,消息等事件。windows的运行是来源于这些事件驱动的,所以一旦我们截获了这些事件,就可以篡改程序本来的功能了。但是在Linux中,并不存在这样的api。要抓获内核中的input事件,就必须另外编辑驱动进行额外的处理。 这是以前我在工作中遇到的一个需求:在用户按下某个功能键

faithsws的专栏 6679

SRAM compiler选项中 Soft Error Repair (SER)

引起的瞬时故障,可能会影响 SRAM 中存储的数据。SER 功能通过某种机制检测并修复这些错误,从而提高存储器的可靠性。在 SRAM 编译器中,

hzmscut的博客 1158

硬件安全与恶意代码: Linux Hooking(钩子)机制原理与实现

Hooking简介 Hooking技术是一系列技术的通称,通过拦截在软件构件之间传递的 函数调用(function calls)/信息(messages)/事件(events) 来改变OS, 应用(application)或者其他软件构件的行为. 譬如改变准备调用的函数指针使之指向需要的hook函数,在执行了hook函数之后再返回原来的函数指针。 当我们试图用一段代码来分析程序中某段逻辑路径被执行...

This is Ptero 2759

HBuilderX远程开发环境配置:Windows SSH连接实操

详细介绍如何在Windows系统中通过SSH连接远程服务器,配置HBuilderX进行高效远程开发,提升编码协作效率。全程实操演示,轻松掌握hbuilderx与远程环境的无缝对接。

weixin_35751194的博客 1194

银行监管报送系统介绍(十五):金融审计平台

金审平台主要包括基础、财务、结算、信贷和中间业务五大板块,主要服务于审计署对中国银行的各项审计任务,同时也可为行内审计、稽核检查、数据分析、总分行提供基础数据服务,为实现基础数据共享提供了有力的数据保障。2019年1月某全国性股份制商业银行收到审计署2019-23号文,文中指出为进一步提高审计数据质量,审计署审计组派员前往9家重点商业银行,就完善标准化数据的相关情况与各银行有关部门进行讨论协商。关于数据报送频率及报送内容:数据从2019年4月开始,按月报送,即于每月25日之前报送上月数据;

银行信息系统应用架构详解 2061

Qt之Hook(键盘钩子)的简单使用(挂接截图程序,含源码+注释)

使用钩子时注意数据的类型及参数的含义,不同的钩子其参数及含义不同需要好好记一下;包括钩子可以封装在库中或子线程中调用,该部分文中没有体现,值得研究一下。

lw的博客 3260

基于STM32L4XX、HAL库的YT8531C-CA以太网收发器(PHY)驱动程序设计

是一款由裕太微推出的高性价比、低功耗的单端口 10/100M 以太网物理层收发器(PHY)。它通过标准的 MII(介质独立接口)或 RMII(精简介质独立接口)与微控制器的 MAC 层连接,实现将数字信号与网络模拟信号之间的转换。支持自动协商(Auto-Negotiation),自动选择最高速率和双工模式。支持 HP Auto-MDIX(自动交叉直连),无需区分直通线或交叉线。低功耗设计,特别适合电池供电或对功耗敏感的 STM32L4 应用。支持 MII 和 RMII 接口,节省引脚(RMII模式)。

zhusl6688的博客 628

深入分析C#键盘勾子(Hook)拦截器,屏蔽键盘活动的详解

这个列表的指针指向指定的,应用程 序定义的,被Hook子程调用的回调函数,也就是该钩子的各个处理子程。最近安装的钩子放在链的开始, 而最早安装的钩子放在最后,也就是后加入的先获得控制权。也就是说每个进程所拥有的相同的DLL的全局数据,它们的名称相同,但其值却并不一定是相同的,而且是互不干涉的。在钩子子程中调用得到控制权的钩子函数在完成对消息的处理后,如果想要该消息继续传递,那么它必须调用另外一个 SDK中的API函数CallNextHookEx来传递它,以执行钩子链表所指的下一个钩子子程。

weixin_42099527的博客 3827

redhawk:STA timing data file解析

我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧?STA timing data file分为以下几个部分:• Header• Name Map• Footer这部分报告设计的基本信息,例如文件类型,设计名称,分隔符等。...

m0_61544122的博客 1156

【Unity】Gif图片播放插件(支持UI及模型纹理渲染两种模式)

unity本身不支持GIF格式文件直接渲染, 因此一般的做法是通过加载图片,通过代码控制其循环播放、停止等,模拟动画效果,本文简单介绍一下某个现有开源工具,感谢开源作者。

灵境引路人 4036

java键盘钩子_HOOK使用:全局键盘钩子

// CatchKey.cpp : Defines the entry point for the DLL application.//#define _WIN32_WINNT 0x0500 //设置系统版本,可以使用底层键盘钩子#define WM_MY_SHORTS (WM_USER + 105)#include "windows.h"//全局变量LPWORDg_lpdwVir...

weixin_35660038的博客 632

WPF实现棋盘式图片切换效果

实现效果如下: 思路:在自定义控件中放置两个Image控件,点击前后翻页按钮时对图片进行裁剪,随机打乱顺序后添加动作。 步骤: 1、MyImageControl控件 /// <summary> /// MyImageControl.xaml 的交互逻辑 /// </summary> public partial class MyImageControl : UserControl { public static r

dnazhd的博客 1125

简单实现[BCB5]:键盘全局钩子[Hook],监视多进程键盘操作。

 闲来无事,在WIN2K下用BCB5做了个键盘挂钩小程序,监视全局按键情况。Hook安放和回调函数放在一个单独DLL中,DLL原码如下: //----------------------------------------------------------------------------------------------------extern "C" __declspec(dll

qiren2001的专栏 1406

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

深入理解 Windows 全局键盘钩子(Hook):拦截 Win 键的 Go 实现

本文介绍了Windows钩子机制,重点讲解了如何使用Go语言拦截Windows键(Win键)。通过WH_KEYBOARD_LL低级键盘钩子,无需DLL注入即可实现全局按键拦截。文章详细解析了Go代码实现,包括钩子安装、回调处理和消息循环等关键部分,并说明了如何编译运行。最后指出该方法的局限性,如无法拦截某些系统级组合键(如Ctrl+Alt+Del)。该技术可用于开发键盘记录器或热键管理工具,但需注意合法使用。

编程爱好者 1171

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

转自sgear博客:C#.Net的全局键盘钩子(Hook)技术

优快云 推荐tag:dll function StorePage(){d=document;t=d.selection?(d.selection.type!=None?d.selection.createRange().text:):(d.getSelection?d.getSelection():);void(keyit=window.open(http://www.36

c8640的专栏 712

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

简单实现[BCB5]:键盘全局钩子[Hook],监视多进程键盘操作。 (转)

简单实现[BCB5]:键盘全局钩子[Hook],监视多进程键盘操作。 (转)[@more@] 闲来无事,在Win2k下用BCB5做了个键盘挂钩小程序,监视全局按键情况。Hook安放和回调函数放在一个单独DLL中,DLL原码如...

csd3176的博客 240

如何让你的程序避开全局键盘钩子的监视

原文地址:http://blog.okbase.net/BlueSky/archive/3839.html        一直以来有个疑问,就是如果别人在你的电脑上安装了键盘钩子来监视你的键盘按键动作,我的程序怎么才能避开这些全局键盘钩子(system-wide hook)的监视.正好最近一段时间因为工作关系在研究钩子,顺便研究了一下这个问题,今天算是找到了一个解决办法. 解决办法: 在我的程序...

p312011150的博客 2117

Keyboard Hook API函数 参数说明

来源:https://www.cnblogs.com/grenet/archive/2010/12/07/1898840.html 1、Keyboard的HOOK函数分为两种,WH_KEYBOARD_LL和WH_KEYBOARD。我们一般用第一种,全局的键盘钩子,能拦截所有的键盘按键的消息。   2、网上有人说,全局的钩子要放在单独的DLL中才能使用。我试了一下,不放在单独的DLL...

weixin_30897233的博客 533

WPF毫秒级桌面时钟的实现-C#中Hook(钩子)的应用

最近由于项目中需要精确记录某些操作的发生时间,但又没有办法打日志,因此写了个小工具,用来记录当前的毫秒级本机时间。(程序内部实现了全局钩子,监听所有的键盘事件,即KeyDown,KeyUp事件。)工具功能如下:1.通过任意键盘按键来记录当前时间2.可以在列表处单击记录当前时间C#中对于Hook API的包装如下:using System;using System.Collections.Gener

muzizongheng的专栏 4348

控制台程序安装全局钩子

   今天在写一个程序的时候发现的问题,在以前的学习过程中没有遇到过,所以记录以备后查程序大致是这样的 A:主程序 控制台程序 负责安装一个WH_KEYBOARD_LL钩子,其中钩子的安装于回调函数在Hook.Dll中B:目标程序 窗体程序怎么操作都不行,Hook.dl可以确定没有任何差错,dll的调用以及SetHook都可以调用,就是回调函数来不了后来经过不断调试发现,原来钩子是依靠的消息响应机制,所以必须要有消息响应才可以所以务必要添加上 MSG msg; DWORD ret; while (r

Mr.Out的专栏 3663

C#.Net的全局键盘钩子(Hook)技术

///如未特别说明,本人所发表的技术文章都为原创, 任何人引用都请注明出处,并包含本声明 ///向无名的开源英雄致敬 2005-03-09 using System;using System.Windows.Forms;using System.Runtime.InteropServices;using System.Reflection;namespace HookDll{ public

6104
上一篇: ubuntu unity 3D桌面效果
下一篇: 对于深度与广度的思考
AstrayLinux
博客等级 码龄15年 55粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值