C# HOOK钩子屏蔽键盘代码
来源:互联网 发布:广东人吃老鼠知乎 编辑:程序博客网 时间:2024/05/16 17:17
C#基于HOOK钩子屏蔽键盘代码,包括了安装钩子和 卸载钩子,设置的是线程钩子,或截获键盘上的Ctrl+Esc 、Alt+Esc、alt+f4 、alt+tab、Ctrl+Shift+Esc、截获alt+空格 、截获Ctrl+Alt+Delete 、截获Ctrl+Alt+空格,钩子函数,需要引用空间(using System.Reflection;),线程钩子监听键盘消息设为2,全局钩子监听键盘消息设为13,线程钩子监听鼠标消息设为7,全局钩子监听鼠标消息设为14。
using System;
using System.Collections.Generic;using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using System.Reflection;
using System.IO;
namespace ScreenLock
{
public class KeyboardHook
{
public delegate int KeyboardProc(int nCode, IntPtr wParam, IntPtr lParam);
static int hKeyboardHook = 0;
KeyboardProc KeyboardHookProcedure;
public const int WH_KEYBOARD = 13;
public const int WH_MOUSE_LL = 14;
public struct KeyboardMSG
{
public int vkCode;
public int scanCode;
public int flags;
public int time;
public int dwExtraInfo;
public int VK_CONTROL;
public int VK_MENU;
public int VK_DELETE;
}
[DllImport("kernel32")]
public static extern int GetCurrentThreadId();
[DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
public static extern int SetWindowsHookEx(int idHook, KeyboardProc lpfn, IntPtr hInstance, int threadId);
[DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
public static extern bool UnhookWindowsHookEx(int idHook);
[DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
public static extern int CallNextHookEx(int idHook, int nCode, IntPtr wParam, IntPtr lParam);
private int KeyboardHookProc(int nCode, IntPtr wParam, IntPtr lParam)
{
KeyboardMSG m = (KeyboardMSG)Marshal.PtrToStructure(lParam, typeof(KeyboardMSG));
if ((int)m.vkCode == 91 || (int)m.vkCode == 92 || (int)m.vkCode == 10)
{
return 1;
}
if (((int)m.vkCode == 46) && ((int)m.vkCode == 17) && ((int)m.vkCode == 18))
{
return 2;
}
if (m.vkCode == (int)Keys.Escape && (int)Control.ModifierKeys == (int)Keys.Control) //截获Ctrl+Esc
{
return 1;
}
if (m.vkCode == (int)Keys.Escape && (int)Control.ModifierKeys == (int)Keys.Alt) //截获Alt+Esc
{
return 1;
}
if (m.vkCode == (int)Keys.F4 && (int)Control.ModifierKeys == (int)Keys.Alt) //截获alt+f4
{
return 1;
}
if (m.vkCode == (int)Keys.Tab && (int)Control.ModifierKeys == (int)Keys.Alt) //截获alt+tab
{
return 1;
}
if (m.vkCode == (int)Keys.Escape && (int)Control.ModifierKeys == (int)Keys.Control + (int)Keys.Shift) //截获Ctrl+Shift+Esc
{
return 1;
}
if (m.vkCode == (int)Keys.Space && (int)Control.ModifierKeys == (int)Keys.Alt) //截获alt+空格
{
return 1;
}
if (m.vkCode == (int)Keys.Delete && (int)Control.ModifierKeys == (int)Keys.Control + (int)Keys.Alt) //截获Ctrl+Alt+Delete
{
return 1;
}
if (m.vkCode == (int)Keys.Space && (int)Control.ModifierKeys == (int)Keys.Control + (int)Keys.Alt) //截获Ctrl+Alt+空格
{
return 1;
}
return CallNextHookEx(hKeyboardHook, nCode, wParam, lParam);
}
// 安装钩子
public void KeyMaskStart()
{
if (hKeyboardHook == 0)
{
// 创建HookProc实例
KeyboardHookProcedure = new KeyboardProc(KeyboardHookProc);
// 设置线程钩子
hKeyboardHook = SetWindowsHookEx(WH_KEYBOARD, KeyboardHookProcedure,
Marshal.GetHINSTANCE(Assembly.GetExecutingAssembly().GetModules()[0]), 0);
// 如果设置钩子失败
if (hKeyboardHook == 0)
{
KeyMaskStop();
throw new Exception("SetWindowsHookEx failed.");
}
}
}
// 卸载钩子
public void KeyMaskStop()
{
bool retKeyboard = true;
if (hKeyboardHook != 0)
{
retKeyboard = UnhookWindowsHookEx(hKeyboardHook);
hKeyboardHook = 0;
}
if (!(retKeyboard))
{
throw new Exception("UnhookWindowsHookEx failed.");
}
}
}
}
0 0
- C# HOOK钩子屏蔽键盘代码
- c# 钩子(hook)键盘
- c# 钩子屏蔽键盘快捷键
- c# 钩子屏蔽键盘快捷键
- 如何屏蔽windows mobile手机按键 pda手机键盘钩子/HOOK
- HOOK全局键盘钩子
- 鼠标键盘钩子(HOOK)
- 键盘钩子 HOOK
- C#键盘勾子(Hook)拦截器,屏蔽键盘活动
- C#键盘勾子(Hook)拦截器,屏蔽键盘活动
- C#钩子实现简单鼠标键盘的监控和屏蔽
- 用钩子(hook)实现C#的屏幕键盘效果
- 用钩子(hook)实现C#的屏幕键盘效果
- C#自我总结: 键盘钩子(HOOK)管理类
- Winodws HOOK 之键盘钩子
- VC HOOK 键盘钩子 注意事项
- HOOK使用:全局键盘钩子
- HOOK使用:全局键盘钩子
- Oracle 将null值转化为其他值
- Ubuntu12.04 搭建TFTP服务
- 处理器之你必须知道的ARM的22个基本概念
- 算法重拾之路——最长公共子序列(LCS)
- 数组初入和数组的使用
- C# HOOK钩子屏蔽键盘代码
- CV codes代码分类整理合集
- sqlserver创建临时表 【转
- css动画简易模式
- windows 右手复制 粘贴
- java的树形控件(1)
- android多国语言---简写对应国家code
- CentOS 6.3 64位下mysql5.5.25安装图解教程
- 基因