知识大全 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

相关参考