一、界面样式如下:
主要功能如下:安装钩子拦截按键,允许按键有效和无效,可以记录按键,以及取消钩子。 二、定义界面控件:label1 标记按键、button1 安装钩子按钮、 button2 取消钩子按钮
三、源码
1、主界面Form1
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using System.Reflection;
using System.Diagnostics;
using Microsoft.Win32;
using WinformHook;
namespace WinformHook
{
public partial class Form1 : Form
{
//钩子管理对象
private KeyboardHookLib _keyboardHook = null;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
//安装钩子
_keyboardHook = new KeyboardHookLib();
_keyboardHook.InstallHook(this.OnKeyPress);
}
private void button2_Click(object sender, EventArgs e)
{
//取消钩子
if (_keyboardHook != null) _keyboardHook.UninstallHook();
}
/// <summary>
/// 客户端键盘捕捉事件
/// </summary>
/// <param name="hookStruct">由Hook程序发送的按键信息</param>
/// <param name="handle">四合扣是否拦截</param>
public void OnKeyPress(KeyboardHookLib.HookStruct hookStruct, out bool handle)
{
handle = false; //预设置不拦截任何键
if (hookStruct.vkCode == 91) //截获左侧开始win键
{
handle = true;
橡胶硬度
}
if (hookStruct.vkCode == 92)// 截获右侧开始win键
{
handle = true;
}
//截获Ctrl+Esc
if (hookStruct.vkCode == (int)Keys.Escape && (int)Control.ModifierKeys == (int)Keys.Control)
{
handle = true;
}
//截获alt+f4
if (hookStruct.vkCode == (int)Keys.F4 && (int)Control.ModifierKeys == (int)Keys.Alt)
{
数据销毁
handle = true;
}
//截获alt+tab
if (hookStruct.vkCode == (int)Keys.Tab && (int)Control.ModifierKeys == (int)Keys.Alt)
{
handle = true;
}
//截获F1
if (hookStruct.vkCode == (int)Keys.F1)
{
handle = truecd架>踢踏舞鞋;
}
//截获Ctrl+Alt+Delete
if ((int)Control.ModifierKeys == (int)Keys.Control + (int)Keys.Alt + (int)Keys.Delete)
{
handle = true;
}
//如果键A~Z
if (hookStruct.vkCode >= (int)Keys.A && hookStruct.vkCode <= (int)Keys.Z)
{
//挡掉B键
if (hookStruct.vkCode == (int)Keys.B)
hookStruct.vkCode = (int)Keys.None; //设键为0
handle = true;
}
Keys key = (Keys)hookStruct.vkCode;
label1.Text = "你按下:" + (key == Keys.None ? "" : key.ToString());
}
}
}
2、键盘钩子操作类KeyboardHookLib
using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
using System.Reflection;
using System.Diagnostics;
using Microsoft.Win32;
using System.Windows.Forms;
namespace WinformHook
{
/// <summary>
/// 键盘Hook管理类
/// </summary>
public class KeyboardHookLib
{
private const int WH_KEYBOARD_LL = 13; //键盘
//键盘处理事件委托,当捕获键盘输入时调用定义该委托的方法
private delegate int HookHandle(int nCode, int wParam, IntPtr lParam);
//客户端键盘处理事件
public delegate void ProcessKeyHandle(HookStruct param, out bool handle);
//接收SetWindowsHookEx返回值
private static int _hHookValue = 0;
//勾子程序处理事件
private HookHandle _KeyBoardHookProcedure;
//Hook结构
[StructLayout(LayoutKind.Sequential)]
public class HookStruct
{
public int vkCode;
public int scanCode;
public int flags;
public int time;
public int dwExtraInfo;
}
//设置钩子
[DllImport("user32.dll")]
private static extern int SetWindowsHookEx(int idHook, HookHandle lpfn, IntPtr hInstance, int threadId);
触摸调光ic //取消钩子
[DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
private static extern bool UnhookWindowsHookEx(int idHook);