winform键盘全局与线程Hook的使用方法
发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这篇文章主要讲解了"winform键盘全局与线程Hook的使用方法",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"winform键盘全局与线程Hook的
千家信息网最后更新 2026年11月02日winform键盘全局与线程Hook的使用方法
这篇文章主要讲解了"winform键盘全局与线程Hook的使用方法",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"winform键盘全局与线程Hook的使用方法"吧!
定义数据结构
////// 声明键盘钩子的封送结构类型/// [StructLayout(LayoutKind.Sequential)]public class KeyboardHookStruct {public int vkCode;//表示一个1到254间的虚拟键盘码public int scanCode;//表示硬件扫描码public int flags;public int time;public int dwExtraInfo; }
声明Hook相关方法
//使用WINDOWS API函数代替获取当前实例的函数,防止钩子失效[DllImport("kernel32.dll")]public static extern IntPtr GetModuleHandle(string lpModuleName);//安装钩子[DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]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 int CallNextHookEx(int idHook, int nCode, Int32 wParam, IntPtr lParam);//卸载钩子[DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]public static extern bool UnhookWindowsHookEx(int idHook);// 取得当前线程编号(线程钩子需要用到)[DllImport("kernel32.dll")]static extern int GetCurrentThreadId();Hook拦截方法
全局Hook
private int KeyboardHookProc(int nCode, Int32 wParam, IntPtr lParam) {if ((nCode >= 0) && (OnKeyDownEvent != null || OnKeyUpEvent != null || OnKeyPressEvent != null)) { KeyboardHookStruct MyKBHookStruct = (KeyboardHookStruct)Marshal.PtrToStructure(lParam, typeof(KeyboardHookStruct)); //引发OnKeyDownEventif (OnKeyDownEvent != null && (wParam == WM_KEYDOWN || wParam == WM_SYSKEYDOWN)) { Keys keyData = (Keys)MyKBHookStruct.vkCode; KeyEventArgs e = new KeyEventArgs(keyData); OnKeyDownEvent(this, e); } }return CallNextHookEx(hKeyboardHook, nCode, wParam, lParam); }线程Hook
private int KeyboardHookProc(int nCode, Int32 wParam, IntPtr lParam) {if ((nCode >= 0) && (OnKeyDownEvent != null || OnKeyUpEvent != null || OnKeyPressEvent != null)) { //引发OnKeyDownEventif (OnKeyDownEvent != null && nCode==0) { Keys keyData = (Keys)wParam; KeyEventArgs e = new KeyEventArgs(keyData); OnKeyDownEvent(this, e); } }return CallNextHookEx(hKeyboardHook, nCode, wParam, lParam); }全局/线程Hook参数结构区别
线程Hook KeyboardHookProc函数的各个参数意义如下:nCode 消息的类型,分HC_ACTION和HC_NOREMOVEwParam 按键的虚拟键码 lParam 按键的相关参数信息,包括重复时间、按键的状态(按下或弹起)等全局Hook KeyboardHookProc函数的各个参数意义如下:nCode 消息的类型,有HC_ACTIONwParam 按键的状态(按下或弹起)WM_KEYDOWN、WM_KEYUP、WM_SYSKEYDOWN、WM_SYSKEYUPlParam 指向KeyboardHookStruct结构的指针,该结构包含了按键的详细信息。
添加Hook
全局Hook
public void Start() {if (hKeyboardHook == 0) { KeyboardHookProcedure = new HookProc(KeyboardHookProc);using (System.Diagnostics.Process curProcess = System.Diagnostics.Process.GetCurrentProcess())using (System.Diagnostics.ProcessModule curModule = curProcess.MainModule) hKeyboardHook = SetWindowsHookEx(13, KeyboardHookProcedure, GetModuleHandle(curModule.ModuleName), 0); if (hKeyboardHook == 0) { Stop();throw new Exception("Set GlobalKeyboardHook failed!"); } } }线程Hook
public void Start() {if (hKeyboardHook == 0) { KeyboardHookProcedure = new HookProc(KeyboardHookProc); hKeyboardHook = SetWindowsHookEx(2, KeyboardHookProcedure, IntPtr.Zero, GetCurrentThreadId()); if (hKeyboardHook == 0) { Stop();throw new Exception("Set GlobalKeyboardHook failed!"); } } }注:idHook 钩子类型,即确定钩子监听何种消息
线程钩子监听键盘消息应设为2,全局钩子监听键盘消息应设为13
线程钩子监听鼠标消息应设为7,全局钩子监听鼠标消息应设为14
感谢各位的阅读,以上就是"winform键盘全局与线程Hook的使用方法"的内容了,经过本文的学习后,相信大家对winform键盘全局与线程Hook的使用方法这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!
线程
钩子
全局
键盘
消息
方法
按键
结构
监听
使用方法
函数
参数
类型
应设
学习
信息
内容
意义
状态
鼠标
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
广州紫鲸互联网科技有限公司
互联网科技工作委员会
科技平台互联网
科技互联网公司装修
科技信息互联网
互联网科技公司电话
互联网科技论坛
深圳期待互联网科技
四川狮子座互联网科技
昭通互联网科技选哪家
宝灵互联网科技有限公司
互联网与医疗科技
华夏恒生科技与互联网科技
用友工业互联网科技发展
卓翼科技产业互联网合作
互联网科技圈年度人物
智帮互联网科技公司最近动向
求路客互联网科技电话
河南商务圈互联网科技有限公司
互联网科技企业文化
互联网品科技
麻工互联网科技
猪兼强互联网科技
深圳卡尔迅互联网科技有限公司怎么样
新华互联网科技校企合作
海南科技产业互联网平台
崇明区互联网教育科技诚信经营
卡尔迅互联网科技有限公司
互联网科技手抄报图片
互联网科技创业计划的风险分析