p{
text-align:center;
}
blockquote > p > span{
text-align:center;
font-size: 18px; color: #ff0000;
}
-->

C# 键盘钩子

1、键盘钩子:

通过代码将键盘的事件屏蔽掉,达到锁屏的效果。(参考地址:https://zhidao.baidu.com/question/135132386108196965.html)

2、代码如下:

 public class Hook : IDisposable
{
public delegate int HookProc(int nCode, int wParam, IntPtr lParam); private static int hHook;
public const int WH_KEYBOARD_LL = ;
private HookProc KeyBoardHookProcedure; [StructLayout(LayoutKind.Sequential)]
public class KeyBoardHookStruct
{
public int vkCode;
public int scanCode;
public int flags;
public int time;
public int dwExtraInfo;
} [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); public void Start()
{
// 安装键盘钩子
if (hHook == )
{
KeyBoardHookProcedure = KeyBoardHookProc;
hHook = SetWindowsHookEx(WH_KEYBOARD_LL, KeyBoardHookProcedure,
GetModuleHandle(Process.GetCurrentProcess().MainModule.ModuleName), );
//如果设置钩子失败.
if (hHook == )
{
Close();
}
else
{
var key = Registry.CurrentUser.OpenSubKey(
@"Software\Microsoft\Windows\CurrentVersion\Policies\System", true);
if (key == null) //如果该项不存在的话,则创建该项
key = Registry.CurrentUser.CreateSubKey(
@"Software\Microsoft\Windows\CurrentVersion\Policies\System");
key.SetValue("DisableTaskMgr", , RegistryValueKind.DWord);
key.Close();
}
}
} public void Close()
{
var retKeyboard = true;
if (hHook != )
{
retKeyboard = UnhookWindowsHookEx(hHook);
hHook = ;
} //如果去掉钩子失败.
//if (!retKeyboard) throw new Exception("UnhookWindowsHookEx failed.");
var key = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\Policies\System",
true);
if (key != null)
{
key.DeleteValue("DisableTaskMgr", false);
key.Close();
}
} public static int KeyBoardHookProc(int nCode, int wParam, IntPtr lParam)
{
if (nCode >= )
{
var kbh = (KeyBoardHookStruct) Marshal.PtrToStructure(lParam, typeof(KeyBoardHookStruct));
if (kbh.vkCode == ) // 截获左win(开始菜单键)
return ;
if (kbh.vkCode == ) // 截获右win
return ;
if (kbh.vkCode == (int) Keys.Escape && (int) Control.ModifierKeys == (int) Keys.Control) //截获Ctrl+Esc
return ;
if (kbh.vkCode == (int) Keys.F4 && (int) Control.ModifierKeys == (int) Keys.Alt) //截获alt+f4
return ;
if (kbh.vkCode == (int) Keys.Tab && (int) Control.ModifierKeys == (int) Keys.Alt) //截获alt+tab
return ;
if (kbh.vkCode == (int) Keys.Escape &&
(int) Control.ModifierKeys == (int) Keys.Control + (int) Keys.Shift) //截获Ctrl+Shift+Esc
return ;
if (kbh.vkCode == (int) Keys.Space && (int) Control.ModifierKeys == (int) Keys.Alt) //截获alt+空格
return ;
if (kbh.vkCode == ) //截获F1
return ;
if (kbh.vkCode == (int) Keys.Control && kbh.vkCode == (int) Keys.Alt && kbh.vkCode == (int) Keys.Delete)
return ;
if ((int) Control.ModifierKeys == (int) Keys.Control + (int) Keys.Alt + (int) Keys.Delete
) //截获Ctrl+Alt+Delete
return ;
if ((int) Control.ModifierKeys == (int) Keys.Control + (int) Keys.Shift) //截获Ctrl+Shift
return ;
} return CallNextHookEx(hHook, nCode, wParam, lParam);
} #region IDisposable 成员 public void Dispose()
{
Close();
} #endregion
}

C# 键盘钩子的更多相关文章

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

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

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

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

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

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

  4. C#鼠标键盘钩子

    using System;using System.Collections.Generic; using System.Reflection; using System.Runtime.Interop ...

  5. 在WPF中快速实现键盘钩子

    大部分的时候,当我们需要键盘事件的时候,可以通过在主窗口注册KeyBinding来实现,不过,有的时候我们需要的是全局键盘事件,想在任何一个地方都能使用,最开始的时候我是通过键盘钩子来实现的, 不过键 ...

  6. WPF 利用键盘钩子来捕获键盘,做一些不为人知的事情...完整实例

    键盘钩子是一种可以监控键盘操作的指令. 看到这句话是不是觉得其实键盘钩子可以做很多事情. 场景 当你的程序需要一个全局的快捷键时,可以考虑使用键盘钩子,如大家常用qq的截图快捷键,那么在WPF里怎么去 ...

  7. 钩子编程(HOOK) 安装进程内键盘钩子 (1)

    摘要:钩子能够监视系统或进程中的各种事件消息.截获发往目标窗体的消息并进行处理.这样,我们就能够在系统中安装自己定义的钩子,监视系统中特定事件的发生.完毕特定的功能,比方截获键盘.鼠标的输入.屏幕取词 ...

  8. C#实现键盘钩子

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

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

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

随机推荐

  1. Mac_IntelliJ IDEA For Mac 快捷键

    Mac键盘符号和修饰键说明 ⌘ Command ⇧ Shift ⌥ Option ⌃ Control ↩︎ Return/Enter ⌫ Delete ⌦ 向前删除键(Fn+Delete) ↑ 上箭头 ...

  2. [LeetCode] K-th Smallest Prime Fraction 第K小的质分数

    A sorted list A contains 1, plus some number of primes.  Then, for every p < q in the list, we co ...

  3. python全栈开发 * background 定位 z-index * 180813

    I back-ground 一.颜色的表示: 1.单词 2.rgb表示法 rgb:红色 绿色 蓝色 三原色 光学显示器每个像素都是由三原色的发光原件组成的,靠明亮度不同调成不同的颜色的. 用逗号隔开, ...

  4. 基于STM32的USB枚举过程学习笔记(转)

    之前使用ST官方的库以及网络的资料,完成了使用USB HID类进行STM32和PC机的通讯.由于其他原因并没有深入的分析,虽然实现了功能,但是关于USB设备的枚举,以及具体的通讯方式都没有清晰的概念, ...

  5. 随笔二-https://www.cnblogs.com/shang1680/p/9657994.html

    作业要求来自https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/2097 GitHub远程仓库的地址:https://github.com/ ...

  6. (转)JDK 1.8 预览版Lambda语法分析

    一.lambda含义     lambda表示数学符号“λ”,计算机领域中λ代表“λ演算”,表达了计算机中最基本的概念:“调用”和“置换”.在很多动态语言和C#中都有相应的lambda语法,这类语法都 ...

  7. EL表达式JSTL

    EL表达式语言中定义了11个隐含对象,使用这些隐含对象可以很方便地获取web开发中的一些常见对象,并读取这些对象的数据. 语法:${隐式对象名称}:获得对象的引用 序号 隐含对象名称 描       ...

  8. Spring Boot(三):AOP&日志操作&异常处理

    一.AOP:HttpAspect.java 二.操作日志 在HttpAspect.java中调用org.slf4j.Logger.org.slf4j.LoggerFactory 三.异常处理 1.定义 ...

  9. mac环境使用ATS验证

    https://blog.csdn.net/skylin19840101/article/details/53760146 参考的这篇文章,用 /usr/bin/nscurl --ats-diagno ...

  10. 001-zookeeper 简介-paxos算法,zk简介,特点

    一.概述 大数据体系概述 1.1.什么是zookeeper 是Google的Chubby一个开源的实现,是Hadoop的分布式协调服务 它包含一个简单的原语集,分布式应用程序可以基于他实现同步服务,配 ...