1,钩子操作类

public  class KeyPressSender{[StructLayout(LayoutKind.Sequential)]public class KeyBoardHookStruct{public int vkCode;public int scanCode;public int flags;public int time;public int dwExtraInfo;}//事件输出public event KeyEventHandler KeyUpEvent;//委托 public delegate int HookProc(int nCode, int wParam, IntPtr lParam);static int hHook = 0;public const int WH_KEYBOARD_LL = 13;//LowLevel键盘截获,如果是WH_KEYBOARD=2,并不能对系统键盘截取,Acrobat Reader会在你截取之前获得键盘。 static HookProc KeyBoardHookProcedure;//设置钩子 [DllImport("user32.dll")]public static extern int SetWindowsHookEx(int idHook, HookProc lpfn, IntPtr hInstance, int threadId);[DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]//抽掉钩子 public static extern bool UnhookWindowsHookEx(int idHook);[DllImport("user32.dll")]//调用下一个钩子 public static extern int CallNextHookEx(int idHook, int nCode, int wParam, IntPtr lParam);[DllImport("kernel32.dll")]public static extern int GetCurrentThreadId();[DllImport("kernel32.dll")]public static extern IntPtr GetModuleHandle(string name);public void Hook_Start(){if (hHook == 0){KeyBoardHookProcedure = new HookProc(KeyBoardHookProc);hHook = SetWindowsHookEx(WH_KEYBOARD_LL, KeyBoardHookProcedure,GetModuleHandle(Process.GetCurrentProcess().MainModule.ModuleName), 0);//如果设置钩子失败. if (hHook == 0){Hook_Clear();}}}/// <summary>/// 取消钩子事件/// </summary>public void Hook_Clear(){bool retKeyboard = true;if (hHook != 0){retKeyboard = UnhookWindowsHookEx(hHook);hHook = 0;}}public int KeyBoardHookProc(int nCode, int wParam, IntPtr lParam){if (nCode >= 0){KeyBoardHookStruct kbh = (KeyBoardHookStruct)Marshal.PtrToStructure(lParam, typeof(KeyBoardHookStruct));Keys KeyData = (Keys)Enum.Parse(typeof(Keys), kbh.vkCode.ToString());// 键盘抬起if (KeyUpEvent != null)/* && wParam == WM_KEYUP)*/{//Keys keyData = (Keys)MyKeyboardHookStruct.vkCode;//if (keyData == Keys.Up)//{KeyEventArgs e = new KeyEventArgs(KeyData);//绑定事件KeyUpEvent(this, e);//MessageBox.Show("捕捉到了按键释放");//}}#region 数据操作//switch (k)//{//    case Keys.F2://        if (kbh.flags == 0)//        {//             //        }//        else if (kbh.flags == 128)//        {//            //放开后做什么事//        }//        return 1;//}#endregion}return CallNextHookEx(hHook, nCode, wParam, lParam);}}

2 引用方法:

创建事件与实例化

private KeyEventHandler myKeyEventHandeler = null;//按键钩子//private KeyboardHook k_hook = new KeyboardHook();private KeyPressSender k_hook = new KeyPressSender();

初始化需要挂接事件

  myKeyEventHandeler = new KeyEventHandler(hook_KeyUp);k_hook.KeyUpEvent += myKeyEventHandeler;//钩住键按下k_hook.Hook_Start();//安装键盘钩子

获取键盘输入后操作的方法

private void hook_KeyUp(object sender, KeyEventArgs e){//  这里写具体实现string Log = $"按下了键盘 {e.KeyCode},并已触发。";Common.LogWrite.WriteLog(Log);string PressKeyData = e.KeyCode.ToString().ToUpper();}

关闭钩子

 k_hook.Hook_Clear();//卸载键盘钩子

我的全局键盘钩子(KeyBoardHook)相关推荐

  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. HOOK使用:全局键盘钩子

    // CatchKey.cpp : Defines the entry point for the DLL application. // #define _WIN32_WINNT 0x0500 // ...

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

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

  6. WPF 利用键盘钩子来捕获键盘,做一些不为人知的事情...完整实例

    原文:WPF 利用键盘钩子来捕获键盘,做一些不为人知的事情...完整实例 键盘钩子是一种可以监控键盘操作的指令. 看到这句话是不是觉得其实键盘钩子可以做很多事情. 场景 当你的程序需要一个全局的快捷键 ...

  7. python 键盘钩子_WPF 利用键盘钩子来捕获键盘,做一些不为人知的事情...完整实例...

    原文:WPF 利用键盘钩子来捕获键盘,做一些不为人知的事情...完整实例 键盘钩子是一种可以监控键盘操作的指令. 看到这句话是不是觉得其实键盘钩子可以做很多事情. 场景 当你的程序需要一个全局的快捷键 ...

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

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

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

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

最新文章

  1. RabbitMQ高可用方案总结
  2. 包含目录、库目录、附加包含目录、附加库目录、附加依赖项之详解
  3. 释疑の语法 ON CHANGE OF
  4. vue-cli项目中.postcssrc.js
  5. LeetCode 965单值二叉树-简单
  6. redis5 外部不能连接_【硬见小百科】PCB连接的方法
  7. 网络中的那些事儿(一)之神奇的通讯
  8. Security+ 学习笔记34 硬件安全
  9. 基于JSP和sql server小区物业管理系统毕业论文
  10. KEPServerEX 6 之 EX 6.11.718.0 发布说明
  11. 《惢客创业日记》2019.05.18(周六)视频通话后的一个创意
  12. 华为MH5000模块知识应用简介
  13. gfp 通用成帧程序 帧结构 校验 crc 多项式 加扰
  14. 使用QT实现Mjpeg-streamer的客户端,采用单独的线程进行视频图片的获取
  15. SwiftUI Mapkit 导航基础教程大全之 MKMapView地图显示并实现导航线路(教程含源码)
  16. C程序综合训练随堂考试(2021年5月27日)
  17. ARM NEON寄存器
  18. AP发现AC过程——CAPWAP协议详解
  19. DPad down是哪个键_上海crm系统哪个好_仓库erp管理
  20. Android画中画模式-看这篇就够啦

热门文章

  1. 基于 VPX 总线的工件台运动控制系统研究与开发-DSP+FPGA硬件架构(一)
  2. JavaScript动态创建网页内容的几种方法
  3. 易语言web服务器e2ee_用各种方法搭建自己的个人网页服务器
  4. Flutter Container 设置宽度,最小宽度、最大宽度
  5. 不带头结点的单链表操作
  6. windows10 获取之前连接密码的方式
  7. Prometheus 从入门到入土 -----入土
  8. yolov5中关闭wandb
  9. 编辑距离算法(LD)详解
  10. 疫情对经济与IT的影响