用C# 屏蔽系统热键(包括禁止使用任务管理器)
来源:互联网 发布:婚礼相册mv制作软件 编辑:程序博客网 时间:2024/05/22 09:07
一般来说会用到hook(钩子),即获取系统的按键或者鼠标动作,然后在系统响应之前执行自定义动作,或者直接截断这个消息,
这就是屏蔽系统热键的原理了。
首先要调用操作系统的dll文件,先引入命名空间
using System.Runtime.InteropServices;
调用操作系统动态链接库的方法
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
public static extern IntPtr SetWindowsHookExW(
int idHook,
HookHandlerDelegate lpfn,
IntPtr hmod,
uint dwThreadID);
第一个参数代表钩子ID(13代表键盘钩子,14代表鼠标钩子),第二个参数是一个函数指针,指向钩子需要执行的函数,第三个参数是指向进程块的指针,第四个参数默认为0就行了。
再引用一个获取进程块指针的方法
[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
public static extern IntPtr GetModuleHandle(String modulename);
接下来就是构造一个钩子了(以键盘钩子为例)
定义常量:
public const int WM_KEYDOWN = 0x0100;
public const int WH_KEYBOARD_LL = 13;
public const int WM_SYSKEYDOWN = 0x0104;
定义储存按键信息的结构体:
public struct KBDLLHOOKSTRUCT
{
public int vkCode;
public int scanCode;
public int flags;
public int time;
public int dwExtraInfo;
}
定义一个函数指针:
public delegate int HookHandlerDelegate(
int nCode,
IntPtr wparam,
ref KBDLLHOOKSTRUCT lparam);
声明一个指向执行函数的函数指针:
private HookHandlerDelegate proc;
构造钩子:
proc = new HookHandlerDelegate(HookCallback);
using (Process curPro = Process.GetCurrentProcess())
using (ProcessModule curMod = curPro.MainModule)
{
SetWindowsHookExW(WH_KEYBOARD_LL,
proc,
GetModuleHandle(curMod.ModuleName),
0);
}
这里的HookCallback即为钩子执行的函数,我是这样写的:
private int HookCallback(int nCode,IntPtr wparam,ref KBDLLHOOKSTRUCT lparam)
{
if (
nCode >= 0
&&
(wparam == (IntPtr)WM_KEYDOWN
||
wparam == (IntPtr)WM_SYSKEYDOWN)
)
{
if (lparam.vkCode == 91||lparam.vkCode==164||lparam.vkCode==9||lparam.vkCode==115)
{
return 1;
}
else
{
return 0;
}
}
return 0;
}
这里返回1代表消息终止,即不响应,返回0表示继续。这里的91,164,9,115即键盘的acsii值,表示屏蔽这些按键。
在此系统热键可以完全屏蔽掉了,但是这个方法却不能屏蔽ctrl+alt+del即弹出任务管理器的按键组合,这样就还是不能达到锁屏的效果
这里有个很简单的方法
FileStream MyFs = new FileStream(Environment.ExpandEnvironmentVariables("%windir%system32 askmgr.exe"),
FileMode.Open);
byte[] Mybyte = new byte[(int)MyFs.Length];
MyFs.Write(Mybyte, 0, (int)MyFs.Length);
即使用二进制流打开任务管理器,这样系统会认为任务管理器已经打开,使用ctrl+alt+del也就不会弹出任务管理器的窗口了,显然任务管理器已经打开,只不过在窗体界面是不会看见它罢了。
原文地址:http://blog.csdn.net/maidou0921/article/details/4279291
- 用C# 屏蔽系统热键(包括禁止使用任务管理器)
- 用C# 屏蔽系统热键(包括禁止使用任务管理器)
- C#使用API屏蔽系统热键和任务管理器
- C#使用API屏蔽系统热键和任务管理器
- C#使用API屏蔽系统热键和任务管理器
- c# winform使用API屏蔽系统热键和任务管理器
- c# winform使用API屏蔽系统热键和任务管理器
- C#使用API屏蔽系统热键和任务管理器
- 使用C#屏蔽系统热键
- 屏蔽热键、任务栏、任务管理器
- C# 屏蔽系统热键
- c# 屏蔽任务管理器 张宇轩
- C#暴力屏蔽任务管理器
- 系统控制 屏蔽任务管理器
- c#禁止任务管理器关闭任务
- 屏蔽系统热键
- 怎样屏蔽系统热键
- HOOk 系统热键屏蔽
- POJ 1654 Area (叉积求三角形面积)
- Ubuntu下安装Matlab
- Mms attachment的添加和删除
- Vim Buffer(转载)
- 借助 Ajax 自动保存 JSF 表单,第 1 部分: 利用 XMLHttpRequest 提交 JSF 表单
- 用C# 屏蔽系统热键(包括禁止使用任务管理器)
- 键盘驱动系列---JIURL键盘驱动 2
- 键盘驱动系列---JIURL键盘驱动 3
- 键盘驱动系列---JIURL键盘驱动 4
- Eclipse C C++ 中文语言包获取及安装MinGW
- 纪念开通博客
- c# 更改最大化按钮功能实现最大化时遮盖任务栏,点击Esc取消全屏
- UVA 138 Street Numbers
- 叶诗文得到了百万豪宅,价值三百多万