键盘钩子实例

一、界面样式如下:
主要功能如下:安装钩子拦截按键,允许按键有效和无效,可以记录按键,以及取消钩子。
二、定义界面控件: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);

本文发布于:2024-09-25 18:17:27,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/1/311125.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:钩子   按键   键盘
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议