1. static int hHook = 0;
  2. public delegate int HookProc(int nCode, int wParam, IntPtr lParam);
  3. //LowLevel键盘截获,如果是WH_KEYBOARD=2,并不能对系统键盘截取,Acrobat Reader会在你截取之前获得键盘。
  4. HookProc KeyBoardHookProcedure;
  5. public const int WH_KEYBOARD_LL = 13;
  6. //键盘Hook结构函数
  7. [StructLayout(LayoutKind.Sequential)]
  8. public class KeyBoardHookStruct
  9. {
  10. public int vkCode;
  11. public int scanCode;
  12. public int flags;
  13. public int time;
  14. public int dwExtraInfo;
  15. }
  16. //设置钩子
  17. [DllImport("user32.dll")]
  18. public static extern int SetWindowsHookEx(int idHook, HookProc lpfn, IntPtr hInstance, int threadId);
  19. [DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
  20. //抽掉钩子
  21. public static extern bool UnhookWindowsHookEx(int idHook);
  22. [DllImport("user32.dll")]
  23. //调用下一个钩子
  24. public static extern int CallNextHookEx(int idHook, int nCode, int wParam, IntPtr lParam);
  25.  
  26. [DllImport("kernel32.dll")]
  27. public static extern int GetCurrentThreadId();
  28.  
  29. [DllImport("kernel32.dll")]
  30. public static extern IntPtr GetModuleHandle(string name);
  31.  
  32. public void Hook_Start()
  33. {
  34. // 安装键盘钩子
  35. if (hHook == 0)
  36. {
  37. KeyBoardHookProcedure = new HookProc(KeyBoardHookProc);
  38.  
  39. hHook = SetWindowsHookEx(WH_KEYBOARD_LL,
  40. KeyBoardHookProcedure,
  41. GetModuleHandle(System.Diagnostics.Process.GetCurrentProcess().MainModule.ModuleName), 0);
  42.  
  43. //如果设置钩子失败.
  44. if (hHook == 0)
  45. {
  46. Hook_Clear();
  47. //throw new Exception("设置Hook失败!");
  48. }
  49.  
  50. }
  51.  
  52. }
  53.  
  54. //取消钩子事件
  55. public void Hook_Clear()
  56. {
  57. bool retKeyboard = true;
  58. if (hHook != 0)
  59. {
  60. retKeyboard = UnhookWindowsHookEx(hHook);
  61. hHook = 0;
  62. }
  63. //如果去掉钩子失败.
  64. if (!retKeyboard) throw new Exception("UnhookWindowsHookEx failed.");
  65. }
  66.  
  67. //这里可以添加自己想要的信息处理
  68. public static int KeyBoardHookProc(int nCode, int wParam, IntPtr lParam)
  69. {
  70. if (nCode >= 0)
  71. {
  72. KeyBoardHookStruct kbh = (KeyBoardHookStruct)Marshal.PtrToStructure(lParam, typeof(KeyBoardHookStruct));
  73. if (kbh.vkCode == 91) // 截获左win(开始菜单键)
  74. {
  75. return 1;
  76. }
  77. if (kbh.vkCode == 92)// 截获右win
  78. {
  79. return 1;
  80. }
  81. if (kbh.vkCode == (int)Keys.Escape && (int)Control.ModifierKeys == (int)Keys.Control) //截获Ctrl+Esc
  82. {
  83. return 1;
  84. }
  85. if (kbh.vkCode == (int)Keys.F4 && (int)Control.ModifierKeys == (int)Keys.Alt) //截获alt+f4
  86. {
  87. return 1;
  88. }
  89. if (kbh.vkCode == (int)Keys.Tab && (int)Control.ModifierKeys == (int)Keys.Alt) //截获alt+tab
  90. {
  91. return 1;
  92. }
  93. if (kbh.vkCode == (int)Keys.Escape && (int)Control.ModifierKeys == (int)Keys.Control + (int)Keys.Shift) //截获Ctrl+Shift+Esc
  94. {
  95. return 1;
  96. }
  97. if (kbh.vkCode == (int)Keys.Space && (int)Control.ModifierKeys == (int)Keys.Alt) //截获alt+空格
  98. {
  99. return 1;
  100. }
  101. if (kbh.vkCode == 241) //截获F1
  102. {
  103. return 1;
  104. }
  105. //if (kbh.vkCode == (int)Keys.Delete && (int)Control.ModifierKeys == (int)Keys.Control + (int)Keys.Alt) //截获Ctrl+Alt+Delete
  106. //{
  107. // return 1;
  108. //}
  109. if (kbh.vkCode == 122) //截取F11
  110. {
  111. return 1;
  112. }
  113.  
  114. }
  115. return CallNextHookEx(hHook, nCode, wParam, lParam);
  116. }

  

C# 获取键盘钩子,屏蔽键盘按键的更多相关文章

  1. 键盘钩子监测按键后,获取键码及按键名称(MFC)

    LRESULT CALLBACK LowLevelKeyboardProc(int nCode,WPARAM wParam,LPARAM lParam){ if(nCode ==HC_ACTION & ...

  2. js屏蔽键盘按键

    3.1屏蔽键盘所有键 <script language="javascript"> <!-- function document.onkeydown(){ eve ...

  3. C#键盘钩子 鼠标钩子

    最新对C#模拟键盘按键,鼠标操作产生了兴趣.特从网上收集了一些常用的API用来调用键盘,鼠标操作. class Win32API { #region DLL导入 /// <summary> ...

  4. 基于C#实现的HOOK键盘钩子实例代码

    本文所述为基于C#实现的HOOK实例,该实例可用来屏蔽系统热键.程序主要实现了安装钩子.传递钩子.卸载钩子等功能.在传递钩子中:<param name="pHookHandle&quo ...

  5. 2.添加键盘钩子。向进程中注入dll

    学习笔记 1.首先要建立mfc的动态链接库.在def文件中放入要导出的函数名. 2.添加函数如下 //安装钩子 //HHOOK SetWindowsHookEx( // int idHook,//钩子 ...

  6. 钩子编程(HOOK) 屏蔽全部按键、鼠标及系统功能键 (4)

    摘要:上篇文章<钩子编程(HOOK) 安装系统全局钩子>已经具体的解说了全局钩子的安装.本文将增强一下钩子的功能.实现屏蔽全部按键鼠标与系统功能键.要实现这个功能.须要安装两个全局钩子,& ...

  7. C#实现键盘钩子

    前言: 因为项目中需要使用到快捷键,所以上网找资料了解关于快捷键的实现技术,于是有了键盘钩子的使用学习.在网上了解到,键盘钩子其实只是很多种钩子中的其中一种.所谓钩子:请看下面关于钩子的描述(来自百度 ...

  8. C++:利用全局钩子实现键盘锁

    在家看网课,记笔记不方便.于是就想弄个键盘锁,方便学习(在寝室也好把外接键盘放上去打游戏). 其实这东西挺简单的,就三行代码. HHOOK hk; LRESULT CALLBACK kbproc(in ...

  9. JS实现屏蔽键盘操作

    第一种:当页面初始加载的时候,屏蔽掉当前页面所有的键盘 $(document).ready(function () { document.body.onkeydown = function (even ...

随机推荐

  1. 如何在匿名thread子类中保证线程安全

    在做性能测试的过程中,我写了两个虚拟类ThreadLimitTimeCount和ThreadLimitTimesCount做框架,通过对线程的标记来完成超时请求的记录.旧方法如下: @Override ...

  2. 揭秘webpack loader

    前言 Loader(加载器) 是 webpack 的核心之一.它用于将不同类型的文件转换为 webpack 可识别的模块.本文将尝试深入探索 webpack 中的 loader,揭秘它的工作原理,以及 ...

  3. 团队项目-Beta冲刺1(七个小矮人)

    团队项目-Beta冲刺1(七个小矮人) 一.格式描述 这个作业属于哪个课程 https://edu.cnblogs.com/campus/xnsy/GeographicInformationScien ...

  4. Nginx配置及负载均衡

    转载:http://www.cnblogs.com/jingmoxukong/p/5945200.html nginx简易教程   目录 Nginx  概述  安装与使用  nginx 配置实战  参 ...

  5. 尼姆博弈+SG函数

    博弈这个东西真的很费脑诶.. 尼姆博奕(Nim Game):游戏者轮流从一堆棋子(或者任何道具)中取走一个或者多个,最后不能再取的就是输家.当指定相应数量时,一堆这样的棋子称作一个尼姆堆 当n堆棋子的 ...

  6. 手写 Promise

    在上一章节中我们了解了 Promise 的一些易错点,在这一章节中,我们会通过手写一个符合 Promise/A+ 规范的 Promise 来深入理解它,并且手写 Promise 也是一道大厂常考题,在 ...

  7. python 利用selenium爬取百度文库的word文章

    今天学习如何使用selenium库来爬取百度文库里面的收费的word文档 from selenium import webdriver from selenium.webdriver.common.k ...

  8. Java并发读书笔记:JMM与重排序

    目录 Java内存模型(JMM) JMM抽象结构 重排序 源码->最终指令序列 编译器重排序 处理器重排序 数据依赖性 as-if-serial happens-before happens-b ...

  9. 红帽RedHat 8.0新特性(网络、yum源、Web界面管理等)

    1.Red Hat8 配置静态IP 注意:Red Hat8网络管理默认使用NetworkManager,而不是之前版本的network. 按照之前版本我们一般通过配置文件设置静态IP地址信息,如下: ...

  10. Go语言之路—博客目录

    Go语言介绍 为什么你应该学习Go语言? 开发环境准备 从零开始搭建Go语言开发环境 VS Code配置Go语言开发环境 Go语言基础 Go语言基础之变量和常量 Go语言基础之基本数据类型 Go语言基 ...