屏蔽系统热键钩子Hook程序

时间:2022-09-04 11:38:06

在winform时候,经常需要做屏蔽系统热键:

1、屏蔽左"WIN"、右"Win"

2、屏蔽Ctrl+Esc

3、屏蔽Alt+f4

4、屏蔽Alt+Esc

5、屏蔽Alt+Tab

6、截获Ctrl+Shift+Esc

7、截获Ctrl+Alt+Delete

......

public class Hook : IDisposable
{
//委托
public delegate int HookProc(int nCode, int wParam, IntPtr lParam);
static int hHook = ;
public const int WH_KEYBOARD_LL = ; //LowLevel键盘截获,如果是WH_KEYBOARD=2,并不能对系统键盘截取,Acrobat Reader会在你截取之前获得键盘。
HookProc KeyBoardHookProcedure; //键盘Hook结构函数
[StructLayout(LayoutKind.Sequential)]
public class KeyBoardHookStruct
{
public int vkCode;
public int scanCode;
public int flags;
public int time;
public int dwExtraInfo;
} #region [DllImport("user32.dll")]
//设置钩子
[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 IntPtr GetModuleHandle(string name);
#endregion #region 安装键盘钩子
/// <summary>
/// 安装键盘钩子
/// </summary>
public void Hook_Start()
{
if (hHook == )
{
KeyBoardHookProcedure = new HookProc(KeyBoardHookProc);
hHook = SetWindowsHookEx(WH_KEYBOARD_LL, KeyBoardHookProcedure,
GetModuleHandle(Process.GetCurrentProcess().MainModule.ModuleName), );
//如果设置钩子失败.
if (hHook == )
Hook_Clear();
}
}
#endregion #region 取消钩子事件
/// <summary>
/// 取消钩子事件
/// </summary>
public void Hook_Clear()
{
bool retKeyboard = true;
if (hHook != )
{
retKeyboard = UnhookWindowsHookEx(hHook);
hHook = ;
}
}
#endregion #region 屏蔽键盘
/// <summary>
/// 屏蔽键盘
/// </summary>
/// <param name="nCode"></param>
/// <param name="wParam"></param>
/// <param name="lParam"></param>
/// <returns></returns>
public static int KeyBoardHookProc(int nCode, int wParam, IntPtr lParam)
{
if (nCode >= )
{
KeyBoardHookStruct kbh = (KeyBoardHookStruct)Marshal.PtrToStructure(lParam, typeof(KeyBoardHookStruct));
// 屏蔽左"WIN"、右"Win"
if ((kbh.vkCode == (int)Keys.LWin) || (kbh.vkCode == (int)Keys.RWin))
return ;
//屏蔽Ctrl+Esc
if (kbh.vkCode == (int)Keys.Escape && (int)Control.ModifierKeys == (int)Keys.Control)
return ;
//屏蔽Alt+f4
if (kbh.vkCode == (int)Keys.F4 && (int)Control.ModifierKeys == (int)Keys.Alt)
return ;
//屏蔽Alt+Esc
if (kbh.vkCode == (int)Keys.Escape && (int)Control.ModifierKeys == (int)Keys.Alt)
return ;
//屏蔽Alt+Tab
if (kbh.vkCode == (int)Keys.Tab && (int)Control.ModifierKeys == (int)Keys.Alt)
return ;
//截获Ctrl+Shift+Esc
if (kbh.vkCode == (int)Keys.Escape && (int)Control.ModifierKeys == (int)Keys.Control + (int)Keys.Shift)
return ;
//截获Ctrl+Alt+Delete
if ((int)Control.ModifierKeys == (int)Keys.Control + (int)Keys.Alt + (int)Keys.Delete)
return ;
}
return CallNextHookEx(hHook, nCode, wParam, lParam);
}
#endregion #region 是否屏蔽CTRL+ALT+DEL
/// <summary>
/// 是否屏蔽CTRL+ALT+DEL
/// </summary>
/// <param name="i">1=屏蔽 0=取消屏蔽</param>
public static void ShieldMissionTask(int i)
{
try
{
RegistryKey key = Registry.CurrentUser;
RegistryKey key1 = key.CreateSubKey(@"Software\Microsoft\Windows\CurrentVersion\Policies\System");
key1.SetValue("DisableTaskMgr", i, Microsoft.Win32.RegistryValueKind.DWord);
}
catch (Exception ex)
{
throw ex;
}
}
#endregion /// <summary>
/// 释放资源
/// </summary>
public void Dispose()
{
Hook_Clear();
}
}

需要用到的命名空间

using System;
using Microsoft.Win32;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using System.Diagnostics;

说明:如果屏蔽CTRL+ALT+DEL时,文中方法是操作注册表,需要系统权限,如果没有系统权限,会报错

屏蔽系统热键钩子Hook程序的更多相关文章

  1. C&num;使用API屏蔽系统热键和任务管理器

    最近做的一个winform类型的项目中需要屏蔽系统热键,在网上搜索了一下,基本上都是调用api来进行hook操作,下面的代码就可以完成功能 using System; using System.IO; ...

  2. CI框架源码阅读笔记6 扩展钩子 Hook&period;php

    CI框架允许你在不修改系统核心代码的基础上添加或者更改系统的核心功能(如重写缓存.输出等).例如,在系统开启hook的条件下(config.php中$config['enable_hooks'] = ...

  3. 理解钩子Hook以及在Thinkphp下利用钩子使用行为扩展

    什么是钩子函数 个人理解:钩子就像一个”陷阱”.”监听器”,当A发送一个消息到B时,当消息还未到达目的地B时,被钩子拦截调出一部分代码做处理,这部分代码也叫钩子函数或者回调函数 参考网上说法 譬如我们 ...

  4. C&num; 钩子HOOK专题&lpar;1&rpar;

    目录   基本概念 运行机制 钩子类型 作者 基本概念   钩子(Hook),是Windows消息处理机制的一个平台,应用程序可以在上面设置子程以监视指定窗口的某种消息,而且所监视的窗口可以是其他进程 ...

  5. 钩子&lpar;hook&rpar;编程

    一.钩子介绍 1.1钩子的实现机制 钩子英文名叫Hook,是一种截获windows系统中某应用程序或者所有进程的消息的一种技术.下图是windows应用程序传递消息的过程: 如在键盘中按下一键,操作系 ...

  6. CI框架源代码阅读笔记6 扩展钩子 Hook&period;php

    CI框架同意你在不改动系统核心代码的基础上加入或者更改系统的核心功能(如重写缓存.输出等). 比如,在系统开启hook的条件下(config.php中$config['enable_hooks'] = ...

  7. 钩子&lpar;hook&rpar;

    钩子(hook)编程     钩子(hook)编程 一.钩子介绍 1.1钩子的实现机制 钩子英文名叫Hook,是一种截获windows系统中某应用程序或者所有进程的消息的一种技术.下图是windows ...

  8. C&num;实现全局快捷键&lpar;系统热键&rpar;响应&lpar;转&rpar;

    转自http://www.cnblogs.com/Randy0528/archive/2013/02/04/2892062.html 在应用中,我们可能会需要实现像Ctrl+C复制.Ctrl+V粘贴这 ...

  9. Thinkpad 笔记本 装win7 64 位操作系统热键驱动装不上问题解决!

    Thinkpad 笔记本 装win7 64 位操作系统热键驱动装不上问题解决! 一般牛人的解释如下: 问题终于搞定.是因为需要手工建%PROGRAMFILES%\Lenovo\Hotkey目录.这个写 ...

随机推荐

  1. NoSQL 数据库分类

    类型 部分代表 特点 列存储 Hbase Cassandra Hypertable 顾名思义,是按列存储数据的.最大的特点是方便存储结构化和半结构化数据,方便做数据压缩,对针对某一列或者某几列的查询有 ...

  2. sizeof

    一.sizeof使用的场合: 1.sizeof操作符的一个主要用途是与存储分配和I/O系统那样的例程进行通信.例如: void* malloc(size_t size); size_t fread(v ...

  3. 【转】使用JDK自带jvisualvm监控tomcat

    转载地址: http://my.oschina.net/kone/blog/157239 jdk自带有个jvisualvm工具.该工具是用来监控java运行程序的cpu.内存.线程等的使用情况.并且使 ...

  4. Gulp实战和原理解析

    Gulp实战和原理解析(以weui作为项目实例)http://i5ting.github.io/stuq-gulp/

  5. 初涉JavaScript模式 &lpar;10&rpar; &colon; 函数 【进阶用法】

    写在前面 不知不觉写到第10篇了.这篇写起来很忐忑,终于和高级搭上边了(呵呵),这篇我们 主要 说一下 JS 方法的部分高级用法(我知道的),笔者水平有限,难免有错.废话不多少,进入正文. 初始化 我 ...

  6. dd命令的使用简介

    dd命令: convert and copy a file 用法:  dd if=/PATH/FROM/SRC of=/PATH/TO/DEST   bs=#: block size, 复制单元大小  ...

  7. java调用matlab

    object result[]; result = pClass1.job_3in1(2, c, ws2, 1275, a, 0); string adg[]; adg = result[1].toS ...

  8. MongoDb 命令查询所有数据库列表

    原文:http://blog.csdn.net/huxu981598436/article/details/47216493 MongoDb 命令查询所有数据库列表 CODE: > show d ...

  9. go标准库的学习-mime&sol;multipart

    参考:https://studygolang.com/pkgdoc 导入方式: import "mime/multipart" multipart实现了MIME的multipart ...

  10. webservice restful一个小例子

    需求 公司有一个产品,包括前台WEB界面和多个后台服务,各个服务都需要在前面界面中进行配置和控 制,以调整服务的行为.以前,配置文件都存放在数据库中,界面上修改配置后入库,并发送消息(Socket)通 ...