C# 键盘钩子
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# 键盘钩子的更多相关文章
- C#键盘钩子 鼠标钩子
最新对C#模拟键盘按键,鼠标操作产生了兴趣.特从网上收集了一些常用的API用来调用键盘,鼠标操作. class Win32API { #region DLL导入 /// <summary> ...
- 基于C#实现的HOOK键盘钩子实例代码
本文所述为基于C#实现的HOOK实例,该实例可用来屏蔽系统热键.程序主要实现了安装钩子.传递钩子.卸载钩子等功能.在传递钩子中:<param name="pHookHandle&quo ...
- 2.添加键盘钩子。向进程中注入dll
学习笔记 1.首先要建立mfc的动态链接库.在def文件中放入要导出的函数名. 2.添加函数如下 //安装钩子 //HHOOK SetWindowsHookEx( // int idHook,//钩子 ...
- C#鼠标键盘钩子
using System;using System.Collections.Generic; using System.Reflection; using System.Runtime.Interop ...
- 在WPF中快速实现键盘钩子
大部分的时候,当我们需要键盘事件的时候,可以通过在主窗口注册KeyBinding来实现,不过,有的时候我们需要的是全局键盘事件,想在任何一个地方都能使用,最开始的时候我是通过键盘钩子来实现的, 不过键 ...
- WPF 利用键盘钩子来捕获键盘,做一些不为人知的事情...完整实例
键盘钩子是一种可以监控键盘操作的指令. 看到这句话是不是觉得其实键盘钩子可以做很多事情. 场景 当你的程序需要一个全局的快捷键时,可以考虑使用键盘钩子,如大家常用qq的截图快捷键,那么在WPF里怎么去 ...
- 钩子编程(HOOK) 安装进程内键盘钩子 (1)
摘要:钩子能够监视系统或进程中的各种事件消息.截获发往目标窗体的消息并进行处理.这样,我们就能够在系统中安装自己定义的钩子,监视系统中特定事件的发生.完毕特定的功能,比方截获键盘.鼠标的输入.屏幕取词 ...
- C#实现键盘钩子
前言: 因为项目中需要使用到快捷键,所以上网找资料了解关于快捷键的实现技术,于是有了键盘钩子的使用学习.在网上了解到,键盘钩子其实只是很多种钩子中的其中一种.所谓钩子:请看下面关于钩子的描述(来自百度 ...
- 键盘钩子监测按键后,获取键码及按键名称(MFC)
LRESULT CALLBACK LowLevelKeyboardProc(int nCode,WPARAM wParam,LPARAM lParam){ if(nCode ==HC_ACTION & ...
随机推荐
- Python中的作用域及global用法
Python 中,一个变量的作用域总是由在代码中被赋值的地方所决定的. 函数定义了本地作用域,而模块定义的是全局作用域. 如果想要在函数内定义全局作用域,需要加上global修饰符. 变量名解析:LE ...
- CSS(四)
css元素溢出 当子元素的尺寸超过父元素的尺寸时,需要设置父元素显示溢出的子元素的方式,设置的方法是通过overflow属性来设置. overflow的设置项: 1.visible 默认值.内容不会被 ...
- 编程菜鸟的日记-初学尝试编程-C++ Primer Plus 第6章编程练习3
#include <iostream> using namespace std; void showmenu(void) { cout<<"Please enter ...
- vue中,对象数组多层嵌套时,更新数据更新页面
vue中的对象和数组的元素直接赋值修改时,是不能响应到view中去的 1.对象更新 this.a={title:'列表1’}; this.a.title='列表2’; <h1>{{a.ti ...
- wangEditor大图片上传问题
wangEditor上传大图片时候会 上传超时.后端没有问题,我百度很多,又去群里问,都得不到答案.最后问同事,有个属性 editor.config.uploadTimeout = 10000000 ...
- Codechef July Challenge 2018 : Subway Ride
传送门 首先(想了很久之后)注意到一个性质:同一条边有多种颜色的话保留3种就可以了,这是因为假如最优解要求当前位置与相邻两条边都不相同,那么只要有3条边,就肯定可以满足这一点. 完事就做一个nlogn ...
- js中级6
1.动画 (1)Css样式提供了运动 过渡属性transition 从一种情况到另一种情况叫过渡 transition:time linear de ...
- java_基础_异常
之前只是了解的最基础的异常形式,没有过多的深入 今天因为一些原因了解了一下 下面来说说异常的几种形式 1.try-catch语句块 代码示例 class test{ public static voi ...
- 2018-2019-2 《网络对抗技术》Exp4 恶意代码分析 Week6 20165311
2018-2019 20165311 网络对抗 Exp4 恶意代码分析 2018-2019 20165311 网络对抗 Exp4 恶意代码分析 实验内容 系统运行监控(2分) 恶意软件分析(1.5分) ...
- c# 存储过程取output 值
DataAccess da = new DataAccess(); da.sqlPath = Config.Get("System", "dataCntString&qu ...