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

主程序调用时:

  1. TrueLore.GGZYZXJG.Utility.HookHelper hook = new TrueLore.GGZYZXJG.Utility.HookHelper();
  2. hook.Hook_Start(); 屏蔽热键
  3. //hook.TaskMgrLocking(true); 屏蔽任务管理器
  4.  
  5. //hook.Hook_Clear(); 取消屏蔽
  1.  

屏蔽windows快捷键的方法的更多相关文章

  1. 设置sublime text2/3中默认预览浏览器快捷键的方法

    各位前端大神们,大家在用IDE编辑器的时候喜欢用哪些呢?是Dreamweaver.Zend Studio.editplus又或者是sublime text?今天马浩周给大家就要说说设置sublime ...

  2. Qt Creator快捷键大全,附快捷键配置方法

    一.快捷键配置方法:   进入“工具->选项->环境->键盘”即可配置快捷键.   二.常用默认快捷键:   编号 快捷键 功能 1 Esc 切换到代码编辑状态 2 F1 查看帮助( ...

  3. 在TC(Total Commander)中添加启动Cygwin快捷键的方法

    在TC(Total Commander)中添加启动Cygwin快捷键的方法 1.在Cygwin的安装目录下,增加文件tc-cygwin.bat(例如C:\cygwin-177\tc-cygwin.ba ...

  4. 详细,Qt Creator快捷键大全,附快捷键配置方法

    一.快捷键配置方法: 进入“工具->选项->环境->键盘”即可配置快捷键. 二.常用默认快捷键: 编号 快捷键 功能 1 Esc 切换到代码编辑状态 2 F1 查看帮助(选中某一类或 ...

  5. windows快捷键十八式(win10)

    胖友,如果你的电脑是windows系统,下面这十八招windows快捷键都不会,还敢说你会用windows? 说到windows的快捷键,当然不是只有ctrl+c,ctrl+v这么简单,今天我整理了一 ...

  6. Capslock+ 键盘党都爱的高效利器 - 让 Windows 快捷键操作更加灵活强大

    Capslock+ 键盘党都爱的高效利器 - 让 Windows 快捷键操作更加灵活强大  优化辅助    Windows   2016-06-05 91,167   微博微信QQ空间印象有道邮件   ...

  7. C# 屏蔽windows功能键

    对于触屏的软件来说,我们调出系统键盘以后,我们不想用户回到桌面,这时候我们就需要屏蔽windows键, #region 屏蔽WIN功能键 public delegate int HookProc(in ...

  8. windows关闭端口方法

    windows关闭端口方法 在介绍各种端口的作用前,这里先介绍一下在Windows中如何关闭/打开端口,因为默认的情况下,有很多不安全的或没有什么用的端口是开启的,比如Telnet服务的23端口.FT ...

  9. 【12】Firefox 快捷键大全及更改和定制快捷键的方法

    [12]Firefox 快捷键大全及更改和定制快捷键的方法 答: Firefox 本身没有提供更改和定制快捷键的选项,若有需要,请安装扩展 Keyconfig 来解决.  安装地址如下: Keycon ...

随机推荐

  1. jquery禁用form表单中的文本框

    //禁用form表单中所有的input[文本框.复选框.单选框],select[下拉选],多行文本框[textarea] function disableForm(formId, isDisabled ...

  2. count(*) 和 count(1)和count(列名)区别

    执行效果上:  count(*)包括了所有的列,相当于行数,在统计结果的时候,不会忽略列值为NULL  count(1)包括了所有列,用1代表代码行,在统计结果的时候,不会忽略列值为NULL  cou ...

  3. [转]MySQL中乐观锁、悲观锁(共享锁、排他锁)简介

    InnoDB与MyISAM Mysql 在5.5之前默认使用 MyISAM 存储引擎,之后使用 InnoDB. MyISAM 操作数据都是使用的表锁,你更新一条记录就要锁整个表,导致性能较低,并发不高 ...

  4. Python中的数组和list

    Python的X[y==1, 0] 最近研究逻辑回归,Iris花的经典示例,代码就不全粘贴了,具体代码参看“Iris花逻辑回归与实现” plt.plot(X[y==0, 0], X[y==0,1], ...

  5. linux zip删除指定文件和追加文件

    使用zip命令的-d参数即可删除zip包中的特定文件. 示例:假设有test.zip,包含_code(目录)._code.zip.readme.txt三个文件,现在要删除test.zip中的_code ...

  6. nusaop 关于webService

    用PHP和NuSoap来建立SOAP服务器非常容易.基本上,你只要写出你想要暴露给你的Web services的函数,然后用NuSoap去注册它们就可以了.OK,另外还需要两步才能完成PHP SOAP ...

  7. 串口转以太客户端(增加uci、可连接多个服务器)

    1. 进入barrier_breaker/package/utils文件夹,新建ttl_client 2. 该目录下的Makefile # # Copyright (C) OpenWrt.org # ...

  8. backgroud 应用减小资源大小和请求数

    一,一个典型的应用,利用小图的自动延伸,实现整个网页背景图,充分节约资源宽带.如:汽车之家的404页背景图就是这样 <div style="height: 3000px; backgr ...

  9. php 直接获取url参数赋值成变量。省去繁琐的获取参数,再一个个赋值

    php 直接获取url参数赋值成变量.省去繁琐的获取参数,再一个个赋值 parse_url() 该函数可以解析 URL,返回其组成部分.它的用法如下: array parse_url(string $ ...

  10. 【AMQ】之JMS概念

    1.JMS(Java Message Service)Java消息服务,是Java20几种技术其中之一 2.JMS规范定义了Java中访问消息中间件的接口,但是没有给实现,这个实现就是由第三方使用者来 ...