知识大全 C#使用API屏蔽系统热键和任务管理器
Posted 知
篇首语:不飞则已,一飞冲天;不鸣则已,一鸣惊人。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 C#使用API屏蔽系统热键和任务管理器相关的知识,希望对你有一定的参考价值。
C#使用API屏蔽系统热键和任务管理器 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
using System;
using System IO;
using System Reflection;
using System Runtime InteropServices;
using System Windows Forms;
namespace WAT PMS
/**//// <summary>
/// Description: Hook Helper类 可以屏蔽一些热键并屏蔽任务管理器
/// Author: ZhangRongHua
/// Create DateTime: :
/// UpdateHistory:
/// </summary>
public class HookHelper
Delegates#region Delegates
public delegate int HookProc(int nCode Int wParam IntPtr lParam);
#endregion
变量声明#region 变量声明
private HookProc KeyboardHookProcedure;
private FileStream MyFs; // 用流来屏蔽ctrl alt delete
private const byte LLKHF_ALTDOWN = x ;
private const byte VK_CAPITAL = x ;
private const byte VK_ESCAPE = x B;
private const byte VK_F = x ;
private const byte VK_LCONTROL = xA ;
private const byte VK_NUMLOCK = x ;
private const byte VK_RCONTROL = xA ;
private const byte VK_SHIFT = x ;
private const byte VK_TAB = x ;
public const int WH_KEYBOARD = ;
private const int WH_KEYBOARD_LL = ;
private const int WH_MOUSE = ;
private const int WH_MOUSE_LL = ;
private const int WM_KEYDOWN = x ;
private const int WM_KEYUP = x ;
private const int WM_LBUTTONDBLCLK = x ;
private const int WM_LBUTTONDOWN = x ;
private const int WM_LBUTTONUP = x ;
private const int WM_MBUTTONDBLCLK = x ;
private const int WM_MBUTTONDOWN = x ;
private const int WM_MBUTTONUP = x ;
private const int WM_MOUSEMOVE = x ;
private const int WM_MOUSEWHEEL = x A;
private const int WM_RBUTTONDBLCLK = x ;
private const int WM_RBUTTONDOWN = x ;
private const int WM_RBUTTONUP = x ;
private const int WM_SYSKEYDOWN = x ;
private const int WM_SYSKEYUP = x ;
private static int hKeyboardHook = ;
#endregion
函数转换#region 函数转换
[DllImport( user dll CharSet = CharSet Auto CallingConvention = CallingConvention StdCall)]
public static extern int SetWindowsHookEx(int idHook HookProc lpfn IntPtr hInstance int threadId);
// 卸载钩子
[DllImport( user dll CharSet = CharSet Auto CallingConvention = CallingConvention StdCall)]
public static extern bool UnhookWindowsHookEx(int idHook);
// 继续下一个钩子
[DllImport( user dll CharSet = CharSet Auto CallingConvention = CallingConvention StdCall)]
public static extern int CallNextHookEx(int idHook int nCode Int wParam IntPtr lParam);
// 取得当前线程编号
[DllImport( kernel dll )]
private static extern int GetCurrentThreadId();
[DllImport( user dll CharSet = CharSet Auto CallingConvention = CallingConvention StdCall)]
private static extern short GetKeyState(int vKey);
#endregion
方法#region 方法
/**//// <summary>
/// 钩子回调函数 在这里屏蔽热键
/// <remark>
/// Author:ZhangRongHua
/// Create DateTime: :
/// Update History:
/// </remark>
/// </summary>
/// <param name= nCode >The n code </param>
/// <param name= wParam >The w param </param>
/// <param name= lParam >The l param </param>
/// <returns></returns>
private int KeyboardHookProc(int nCode Int wParam IntPtr lParam)
KeyMSG m = (KeyMSG) Marshal PtrToStructure(lParam typeof (KeyMSG));
if (((Keys) m vkCode == Keys LWin) || ((Keys) m vkCode == Keys RWin) ||
((m vkCode == VK_TAB) && ((m flags & LLKHF_ALTDOWN) != )) ||
((m vkCode == VK_ESCAPE) && ((m flags & LLKHF_ALTDOWN) != )) ||
((m vkCode == VK_F ) && ((m flags & LLKHF_ALTDOWN) != )) ||
(m vkCode == VK_ESCAPE) && ((GetKeyState(VK_LCONTROL) & x ) != ) ||
(m vkCode == VK_ESCAPE) && ((GetKeyState(VK_RCONTROL) & x ) != )
)
return ;
return CallNextHookEx(hKeyboardHook nCode wParam lParam);
/**//// <summary>
/// 启动Hook 并用流屏蔽任务管理器
/// <remark>
/// Author:ZhangRongHua
/// Create DateTime: :
/// Update History:
/// </remark>
/// </summary>
public void HookStart()
if (hKeyboardHook == )
// 创建HookProc实例
KeyboardHookProcedure = new HookProc(KeyboardHookProc);
hKeyboardHook = SetWindowsHookEx(WH_KEYBOARD
KeyboardHookProcedure
Marshal GetHINSTANCE(Assembly GetExecutingAssembly() GetModules()[ ])
);
// 如果设置钩子失败
if (hKeyboardHook == )
HookStop();
//throw new Exception( SetWindowsHookEx failedeeeeeeee );
//用二进制流的方法打开任务管理器 而且不关闭流 这样任务管理器就打开不了
MyFs = new FileStream(Environment ExpandEnvironmentVariables( %windir%\\\\system \\\\taskmgr exe )
FileMode Open);
byte[] MyByte = new byte[(int) MyFs Length];
MyFs Write(MyByte (int) MyFs Length);
/**//// <summary>
/// 卸载hook 并关闭流 取消屏蔽任务管理器
/// <remark>
/// Author:ZhangRongHua
/// Create DateTime: :
/// Update History:
/// </remark>
/// </summary>
public void HookStop()
bool retKeyboard = true;
if (hKeyboardHook != )
retKeyboard = UnhookWindowsHookEx(hKeyboardHook);
hKeyboardHook = ;
if (null != MyFs)
MyFs Close();
if (!(retKeyboard))
throw new Exception( UnhookWindowsHookEx failedsssss );
#endregion
Nested type: KeyMSG#region Nested type: KeyMSG
public struct KeyMSG
public int dwExtraInfo;
public int flags;
public int scanCode;
public int time;
public int vkCode;
#endregion
//PS 也可以通过将[HKEY_CURRENT_USER\\Sofare\\Microsoft\\Windows\\CurrentVersion\\Policies\\System]
cha138/Article/program/net/201311/12339相关参考