使用键盘钩子,调用Win API 函数SetWindowHock。在Hock函数里进行处理。但是,无法勾住Ctrl+Alt+Del。因为他是底层实现的,必须使用键盘驱动才可以实现。 示例代码: C# code /************************* //定义变量 public delegate int HookProc(int nCode, Int32 wParam, IntPtr lParam); static int hKeyboardHook = 0; HookProc KeyboardHookProcedure; /************************* * 声明API函数 * ***********************/ // 安装钩子 (using System.Runtime.InteropServices;) [DllImport("user32.dll",CharSet=CharSet.Auto, CallingC.StdCall)] public static extern int SetWindowsHookEx(int idHook,HookProc lpfn, IntPtr hInstance, int threadId); // 卸载钩子 [DllImport("user32.dll",CharSet=CharSet.Auto, CallingC.StdCall)] public static extern bool UnhookWindowsHookEx(int idHook); // 继续下一个钩子 [DllImport("user32.dll",CharSet=CharSet.Auto, CallingC.StdCall)] public static extern int CallNextHookEx(int idHook, int nCode, Int32 wParam, IntPtr lParam); // 取得当前线程编号(线程钩子需要用到) [DllImport("kernel32.dll")] static extern int GetCurrentThreadId(); //钩子子程:就是钩子所要做的事情 private int KeyboardHookProc(int nCode, Int32 wParam, IntPtr lParam) { if (nCode >= 0) { /**************** //线程键盘钩子判断是否按下键 Keys keyData = (Keys)wParam; if(lParam.ToInt32() > 0) { // 键盘按下 } if(lParam.ToInt32() < 0) { // 键盘抬起 } ****************/ /**************** //全局键盘钩子判断是否按下键 wParam = = 0x100 // 键盘按下 wParam = = 0x101 // 键盘抬起 ****************/ KeyMSG m = (KeyMSG) Marshal.PtrToStructure(lParam, typeof(KeyMSG));//键盘 // 在这里添加你想要做是事情(比如把键盘某些nCode忽略掉) return 0;//如果返回1,则结束消息,这个消息到此为止,不再传递。如果返回0或调用CallNextHookEx函数则消息出了这个钩子继续往下传递,也就是传给消息真正的接受者 } return CallNextHookEx(hKeyboardHook, nCode, wParam, lParam); } //键盘结构 public struct KeyMSG { public int vkCode; //键值 public int scanCode; public int flags; public int time; public int dwExtraInfo; } // 安装钩子 public void HookStart() { if(hKeyboardHook == 0) { // 创建HookProc实例 KeyboardHookProcedure = new HookProc(KeyboardHookProc); // 设置线程钩子 hKeyboardHook = SetWindowsHookEx( 13,KeyboardHookProcedure,Marshal.GetHINSTANCE(Assembly.GetExecutingAssembly().GetModules()[0]),0); //************************************ //键盘线程钩子 //SetWindowsHookEx( 2,KeyboardHookProcedure, IntPtr.Zero, GetCurrentThreadId()); //GetCurrentThreadId() 为要监视的线程ID,你完全可以自己写个方法获取QQ的线程哦 //键盘全局钩子,需要引用空间(using System.Reflection;) //SetWindowsHookEx( 13,KeyboardHookProcedure,Marshal.GetHINSTANCE(Assembly.GetExecutingAssembly().GetModules()[0]),0); // //关于SetWindowsHookEx (int idHook, HookProc lpfn, IntPtr hInstance, int threadId)函数将钩子加入到钩子链表中,说明一下四个参数: //idHook 钩子类型,即确定钩子监听何种消息,上面的代码中设为2,即监听键盘消息并且是线程钩子,如果是全局钩子监听键盘消息应设为13, //线程钩子监听鼠标消息设为7,全局钩子监听鼠标消息设为14。 // //lpfn 钩子子程的地址指针。如果dwThreadId参数为0 或是一个由别的进程创建的线程的标识,lpfn必须指向DLL中的钩子子程。 除此以外,lpfn可 //以指向当前进程的一段钩子子程代码。钩子函数的入口地址,当钩子钩到任何消息后便调用这个函数。 // //hInstance应用程序实例的句柄。标识包含lpfn所指的子程的DLL。如果threadId 标识当前进程创建的一个线程,而且子程代码位于当前 //进程,hInstance必须为NULL。可以很简单的设定其为本应用程序的实例句柄。 // //threadedId 与安装的钩子子程相关联的线程的标识符。如果为0,钩子子程与所有的线程关联,即为全局钩子。 //************************************ // 如果设置钩子失败 if(hKeyboardHook == 0 ) { HookStop(); throw new Exception("SetWindowsHookEx failed."); } } } // 卸载钩子 public void HookStop() { bool retKeyboard = true; if(hKeyboardHook != 0) { retKeyboard = UnhookWindowsHookEx(hKeyboardHook); hKeyboardHook = 0; } if (!( retKeyboard)) throw new Exception("UnhookWindowsHookEx failed."); } //*****************************

windows API 钩子相关推荐

  1. C#低级Windows API钩子拦截键盘输入

    一. 简介 猫和婴儿有很多共同之处.他们都喜欢吃家中养植的植物,都非常讨厌关门.他们也都爱玩弄你的键盘,结果是,你正发送给你的老板的电子邮件可能是以半截句子发送出去的,你的Excel帐户也被加入了一些 ...

  2. MinHook - 最小化的 x86/x64 API 钩子库

    背景 对windows API钩子感兴趣的人都知道有一个优秀的库被微软命名为'Detours'.它真的很有用,但是它的免费版本(Express)是不支持X64.它的收费版本(Professional) ...

  3. windows api打开文件对话框

    用windows api 写打开文件对话框主要使用OPENFILENAME ,GetOpenFileName, GetSaveFileName; 1.OPENFILENAME 结构体介绍:要使用Get ...

  4. Windows API 的数据类型与 Delphi 数据类型对照表

    Windows API 的数据类型与 Delphi 数据类型对照表 Windows 数据类型 Delphi 数据类型 描述 LPSTR PAnsiChar 字符串指针 LPCSTR PAnsiChar ...

  5. 实践API钩子拦截DLL库调用

    前言 在日常分析使用某个软件的过程中,如果我们想要去挖掘软件的漏洞.或者是通过打补丁的方式给软件增添一些新的功能,抑或是为了记录下软件运行过程中被调用的函数及其参数,有时候我们需要劫持对某些DLL库的 ...

  6. Windows API 大全

    Windows API (包含了所有Windows API) Api函数名                               函数说明                             ...

  7. HOOK Windows API

    HOOK Windows API 只能HOOK 本地的API,适用于入门学习 HOOK API的一般步骤: 1.定义假API函数 假API函数,除了函数名称和真API不一样之外,其它的都要跟真API的 ...

  8. c#调用windows api C#简单游戏外挂制作(以Warcraft Ⅲ为例)

    C#简单游戏外挂制作(以Warcraft Ⅲ为例) 网上有很多外挂制作的教程,大多是讲针对大型网络游戏的,主要包含一些抓包.反汇编.C++的知识综合.事实也如此,常见的外挂都是使用VC++写的,从来没 ...

  9. Windows API(三)线程

    Windows API笔记(一)内核对象 Windows API笔记(二)进程和进程间通信.进程边界 Windows API笔记(三)线程和线程同步.线程局部存储 Windows API笔记(三)线程 ...

最新文章

  1. BOS项目 第2天(BaseDao、BaseAction、用户登录、自定义strust登录拦截器)
  2. linux init.d添加启动脚本 ln,linux编写可运行的shell脚本并在其他目录创建ln连接与设置开机启动...
  3. js 打印的一些技巧 去除页眉页脚,主动分页
  4. 第二阶段第七次站立会议
  5. 计算机数值方法期末考试,《计算机数值方法》测试题二
  6. ICC_lab总结——ICC_lab6:版图完成
  7. 浅析微软的网关项目 -- ReverseProxy
  8. gt爵士变形步骤_代码广播简介:您可以编码为24/7的爵士节拍
  9. (转)三层相关案例(及常见的错误)
  10. 1m带宽可以做mysql数据库吗_服务器的1M带宽够用吗?1M网速是多少?
  11. JEECG开源说明:JEECG 完全开源,不收任何费用,可以任用于商业!
  12. 信息学奥赛一本通(1114:白细胞计数)
  13. linux下共享库的制作及常见的问题
  14. html5+css3方式实现mobie app的一些瓶颈
  15. 再述:python中redis的使用(Pool)
  16. 《三桃演义》第二回:返航,火星人柯里昂
  17. DB2数据库认证系列教程——IBM DB2认证考前必备
  18. h3c无线管理 dns服务器,H3C FIT AP与AC连接时三种的注册流程
  19. 苹果homekit,homeassistant,谷歌等智能生态系统,哪一款更加适合你?
  20. [CTFSHOW]中期测评WP(差512和514)

热门文章

  1. Java开发环境的搭建—Java JDK的下载与安装!
  2. linux 串口八字节,八字式管道出水口图片
  3. Spring+ Spring mvc+MyBatis整合
  4. Win10下徽标Win键组合快捷键大全
  5. el-input 不能输入的解决办法
  6. HTML css——哔哩哔哩注册页面简易制作
  7. 在父亲节到来之际,强烈推荐德国幽默大师的连环漫画《父与子》,父子亲情跃然纸上(多图)...
  8. 如何看待马云又唱歌又拍电影
  9. javaweb_一个用户注册的界面
  10. 2020年汽车芯片行业深度报告-1