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

相关参考

知识大全 电脑软件打不开,并且连任务管理器也打不开,连系统都重装不了,360卫士说安全防护中心没开启

电脑软件打不开,并且连任务管理器也打不开,连系统都重装不了,360卫士说安全防护中心没开启任务管理器打开:ctrl+alt+delete,重新装系统可以用u盘,移动硬盘装。电脑关不了机,任务管理器也打

知识大全 请问在Windows XP系统下,任务管理器中,结束一些进程为什么会使桌面一个图标也没有了

请问在WindowsXP系统下,任务管理器中,结束一些进程为什么会使桌面一个图标也没有了?  以下文字资料是由(本站网www.cha138.com)小编为大家搜集整理后发

知识大全 我电脑开机后黑屏只剩下鼠标可以动,任务管理器打不开,安全模式进去也这个样,怎么办啊

你好!我电脑开机后黑屏只剩下鼠标可以动,任务管理器打不开,安全模式进去也这个样,怎么办啊?如果连安全模式进去都是这个情况的话,那么应该就只能重装系统了,不过建议你,在重装系统前,还是对硬盘进行坏道扫描

知识大全 Delphi趣味编程实例三则

Delphi趣味编程实例三则  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  一隐藏任务栏屏蔽热键

知识大全 编写后台监控软件的技巧

  后台监控软件为了达到隐蔽监控的目的应该满足正常运行时不显示在任务栏上在按Ctrl+Alt+Del出现的任务列表中也不显示管理员可以通过热键调出隐藏的运行界面要作到这些必须把当前进程变为一个系统服务

知识大全 我的电脑开机后没桌面黑屏但有鼠标,可以动,且可以用任务管理器运行任务,怎么办

我的电脑开机后没桌面黑屏但有鼠标,可以动,且可以用任务管理器运行任务,怎么办?要判断可能有3个方面:1.显卡问题(重新插,清洁金手指,风扇是否正常.更新驱动,可以下载驱动精灵.再不行的话保修期间要求免

知识大全 每次电脑开机都是黑屏只有鼠标指针,只有手动到任务管理器新建explorer.exe才能到桌面

每次电脑开机都是黑屏只有鼠标指针,只有手动到任务管理器新建explorer.exe才能到桌面1、你懂得在任务管理器新建,但是还是没办法解决继续看下面。2,按Windows键+R打开运行窗口,运行输入r

知识大全 我的电脑为什么打不开dnf啊。 每次到了登录界面就就突然消失来 任务管理器游戏又是在运行

我的电脑为什么打不开dnf啊。每次到了登录界面就就突然消失来任务管理器游戏又是在运行1.你可以进行以下操作请杀一下毒后重启。2.如果不行将任务管理器打开,结束进程QQlogin,TXplatform,

知识大全 VC实现系统热键激活后台服务程序

VC实现系统热键激活后台服务程序  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  摘要本文给出了一

知识大全 Oracle中操作系统优化和使用资源管理器

Oracle中操作系统优化和使用资源管理器  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  操作系