// CatchKey.cpp : Defines the entry point for the DLL application. // #define _WIN32_WINNT 0x0500 //设置系统版本,可以使用底层键盘钩子 #define WM_MY_SHORTS (WM_USER + 105) #include "windows.h" //全局变量 LPWORD g_lpdwVirtualKey = NULL; //Keycode 数组的指针 int g_nLength = 0; //Keycode 数组的大小 HINSTANCE g_hInstance = NULL; //模块实例句柄 HHOOK g_hHook = NULL; //钩子句柄 HWND g_hWnd = NULL; BOOL APIENTRY DllMain(HANDLE hModule, DWORD ul_reason_for_call,LPVOID lpReserved) { //保存模块实例句柄 g_hInstance = (HINSTANCE)hModule; //在进程结束或线程结束时卸载钩子 switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH: break; case DLL_THREAD_ATTACH: break; case DLL_PROCESS_DETACH: case DLL_THREAD_DETACH: delete g_lpdwVirtualKey; if (g_hHook != NULL) UnhookWindowsHookEx(g_hHook); break; } return TRUE; } LRESULT CALLBACK LowLevelKeyboardProc(int nCode, WPARAM wParam,LPARAM lParam) { //判断是否是有效按键 if (nCode >= HC_ACTION && wParam==WM_KEYDOWN) { BOOL bctrl = GetAsyncKeyState(VK_CONTROL)>>((sizeof(SHORT) *8)-1); KBDLLHOOKSTRUCT* pStruct = (KBDLLHOOKSTRUCT*)lParam; LPWORD tmpVirtualKey = g_lpdwVirtualKey; if (pStruct->vkCode == 80 && bctrl) PostMessage(g_hWnd,WM_MY_SHORTS,0,1); return TRUE; } //传给系统中的下一个钩子 return CallNextHookEx(g_hHook, nCode, wParam, lParam); } _declspec(dllexport) BOOL WINAPI StartCatch(LPWORD lpdwVirtualKey, int nLength, HWND pWnd) { g_hWnd = pWnd; //如果已经安装键盘钩子则返回 FALSE if (g_hHook != NULL) return FALSE; //将用户传来的 keycode 数组保存在全局变量中 g_lpdwVirtualKey = (LPWORD)malloc(sizeof(WORD) * nLength); LPWORD tmpVirtualKey = g_lpdwVirtualKey; for (int i = 0; i < nLength; i++) { *tmpVirtualKey++ = *lpdwVirtualKey++; } g_nLength = nLength; //安装底层键盘钩子 g_hHook = SetWindowsHookEx(WH_KEYBOARD_LL, LowLevelKeyboardProc, g_hInstance, NULL); if (g_hHook == NULL) return FALSE; return TRUE; } _declspec(dllexport) BOOL WINAPI StopCatch() { //卸载钩子 if (UnhookWindowsHookEx(g_hHook) == 0) return FALSE; g_hHook = NULL; return TRUE; }

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

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

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

HOOK使用:全局键盘钩子相关推荐

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

    原文地址:http://blog.okbase.net/BlueSky/archive/3839.html 一直以来有个疑问,就是如果别人在你的电脑上安装了键盘钩子来监视你的键盘按键动作,我的程序怎么 ...

  2. 使用raw input 代替全局键盘钩子

    //关于raw input 请查看msdn https://msdn.microsoft.com/en-us/library/windows/desktop/ms645536%28v=vs.85%29 ...

  3. C++编写Windows全局键盘钩子记录键盘输入

    1.键盘钩子处理程序 HookProc 2.键盘钩子安装程序 InstallHook 3.键盘钩子卸载程序 UnInstallHook 4.键盘钩子dll的加载,安装与释放 生成标准windows d ...

  4. 我的全局键盘钩子(KeyBoardHook)

    1,钩子操作类 public class KeyPressSender{[StructLayout(LayoutKind.Sequential)]public class KeyBoardHookSt ...

  5. VC++钩子使用之全局键盘钩子

    文章目录 钩子简介 使用钩子 生成KeyHook.dll 加载KeyHook.dll 窗体接收两次按键消息的问题 参考 如果想要在Win32窗体程序中实现按键捕获,可以覆写PreTranslateMe ...

  6. QQ密码输入框(防键盘钩子)原理分析

    1.网上看到的一些防星号查看器的代码大多是在后台维护一个字符串(真实的密码),界面则不显示真实的密码,这样做,维护那个字符串很费事,就因为我之前那样做过,我才在看到WM_GETTEXT后想要重做一个 ...

  7. vs2019键盘钩子_C#键盘按键监视

    using System; using System.Diagnostics; using System.IO; using System.Runtime.InteropServices; using ...

  8. 利用底层键盘钩子拦载任意按键(回调版)

    前段时间我曾经写过一篇<利用底层键盘钩子屏蔽任意按键>,并放到了我的blog上.这篇文章的题目中把"屏蔽"改成了"拦截",显然要比以前的版本强一些了 ...

  9. 利用底层键盘钩子屏蔽任意按键

    很多人都知道,如果想在系统范围内屏蔽键盘上的任意按键需要使用全局键盘钩子,然而像win键这样"倔强"的按键又不是普通的键盘钩子就能搞定的.这里我提供一种利用底层键盘钩子屏蔽任意按键 ...

最新文章

  1. sql的不等于条件优化_SQL优化案例(2):OR条件优化
  2. NO.7 今天我们是实用派,看看业务选择和部署以及常用故障解决方案是怎么做的...
  3. 学C++,能不能简单点?
  4. 树莓派避障小车(python)
  5. CVPR 2020 | 反传统的无监督人脸旋转方案:旋转-渲染
  6. textarea限制字符数_PAT乙级-1002 写出这个数
  7. Reflection in .net
  8. 批量提交 kafka_Kafka精华问答|kafka的使用场景是什么?
  9. java socket如何请求485协议_javaSE第十五部分 网络编程(1)Socket和ServerSocket
  10. 高效获得准确的中国地图数据并进行可视化
  11. 我写的万年历插件(含天干地支,农历,阳历,节气,各种节假日等),基于MooTools 1.4
  12. 助老服务机器人结构设计
  13. 交换机基本原理与配置
  14. DeDeCMS二次开发教程之程序安装
  15. 打印驱动的安装和卸载
  16. 方舟仙境服务器什么时候修复,方舟生存进化官服多久删一次服务器
  17. Linux Windows 的Tensorflow 配置: Nvidia 老显卡运算能力低于3.0
  18. detached entity passed to persist问题与解决方案
  19. 几种kafka多线程消费方式
  20. 穷人python入门教程视频_穷的解释|穷的意思|汉典“穷”字的基本解释

热门文章

  1. springboot banner.txt 在线制作
  2. java中src_java中garadle工程没有src问题
  3. java函数调用实例_Java使用方法引用实现任意对象的实例方法
  4. react 界面渲染完成 立即执行_React原理解析fiber、diff
  5. java spring 事务提交_Spring 事务提交之后再执行操作
  6. 供销大集有潜力吗_社区团购遭点名批评,互联网巨头真的只是惦记那几捆白菜吗?| 吴坚浙商频道...
  7. exchange无法收发邮件_MAPI session超过Exchange最大限制,邮件发送失败的终极解决方法...
  8. python内容限制_Python --类,实例和访问限制
  9. 7种寻址方式,以及有效地址计算方法。
  10. 系统科学专业 计算机,2018年北京市培养单位数学与系统科学研究院863计算机学科综合(专业)之计算机操作系统考研核心题库...