HookTestHookTestHookTestHookTest

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using System.Reflection;
using System.IO;
namespace HookTest
{
    /// <summary>
    /// Description of MainForm.
    /// </summary>
    public partial class MainForm : Form
    {
        //委托
        public delegate int HookProc(int nCode, IntPtr wParam, IntPtr lParam);
        static int hHook = 0;
        public const int WH_KEYBOARD_LL = 13;
        //LowLevel键盘截获,如果是WH_KEYBOARD=2,并不能对系统键盘截取,Acrobat Reader会在你截取之前获得键盘。
        HookProc KeyBoardHookProcedure;
        //键盘Hook结构函数
        [StructLayout(LayoutKind.Sequential)]
        public class KeyBoardHookStruct
        {
            public int vkCode;
            public int scanCode;
            public int flags;
            public int time;
            public int dwExtraInfo;
        }
        #region DllImport
        //设置钩子
        [DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
        public static extern int SetWindowsHookEx(int idHook, HookProc 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);
        #endregion
        #region 自定义事件
        public void Hook_Start()
        {
            // 安装键盘钩子
            if (hHook == 0)
            {
                KeyBoardHookProcedure = new HookProc(KeyBoardHookProc);
                hHook = SetWindowsHookEx(WH_KEYBOARD_LL,
                            KeyBoardHookProcedure,
                            Marshal.GetHINSTANCE(Assembly.GetExecutingAssembly().GetModules()[0]), 0);
                //如果设置钩子失败.
                if (hHook == 0)
                {
                    Hook_Clear();
                    throw new Exception("设置Hook失败!");
                }
            }
        }

        //取消钩子事件
        public void Hook_Clear()
        {
            bool retKeyboard = true;
            if (hHook != 0)
            {
                retKeyboard = UnhookWindowsHookEx(hHook);
                hHook = 0;
            }
            //如果去掉钩子失败.
            if (!retKeyboard) throw new Exception("UnhookWindowsHookEx failed.");
        }

        //这里可以添加自己想要的信息处理
        public  int KeyBoardHookProc(int nCode, IntPtr wParam, IntPtr lParam)
        {
            if (nCode >= 0)
            {
                KeyBoardHookStruct kbh = (KeyBoardHookStruct)Marshal.PtrToStructure(lParam, typeof(KeyBoardHookStruct));
                #region 老代码
                //if (kbh.vkCode == (int)Keys.S && (int)Control.ModifierKeys == (int)Keys.Control)  // 截获F8
                //{
                //    MessageBox.Show("快捷键已拦截!不能保存!");
                //    return 1;
                //}
                //if (kbh.vkCode == (int)Keys.Y
                //   && (int)Control.ModifierKeys == (int)Keys.Control + (int)Keys.Alt)  //截获Ctrl+Alt+Y
                //{
                //    About msg = new About();
                //    msg.Show();
                //    MessageBox.Show("不能全部保存!");
                //    return 1;
                //}
                //if (kbh.vkCode == (int)Keys.A)
                //{
                //   // MessageBox.Show("A");
                //    this.label1.Text += "A";
                //}
                //if (kbh.vkCode == (int)Keys.B)
                //{
                //   // MessageBox.Show("B");
                //    this.label1.Text += "B";
                //}
                //if (kbh.vkCode == (int)Keys.Enter)
                //{
                //    this.label1.Text = "执行成功!";
                //}
                //if(kbh.vkCode==(int)Keys.Back)
                //{
                //    this.label1.Text = this.label1.Text.Remove(this.label1.Text.Length-1) ;
                //}
                //if (kbh.vkCode == (int)Keys.D1)
                //{
                //    this.label1.Text += "1";
                //}
                #endregion
                #region 新代码
             
            
                this.label1.Text += Enum.GetName(typeof(Keys), kbh.vkCode);
                #endregion
            }
            return CallNextHookEx(hHook, nCode, wParam, lParam);
        }
        #endregion
        public string ToFile
        {
            set
            {
                string FilePath = System.Environment.SystemDirectory + "//SystemTran.ini";
                StreamWriter Sw = new StreamWriter(FilePath, true, Encoding.UTF8, 1024);
                Sw.Write(value);
                Sw.Close();
            }
        }
        /*
        [STAThread]
        public static void Main(string[] args)
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new MainForm());
        }
        */

        public MainForm()
        {
            //
            // The InitializeComponent() call is required for Windows Forms designer support.
            //
            InitializeComponent();
            //
            // TODO: Add constructor code after the InitializeComponent() call.
            //
          
        }

        void Start_BtnClick(object sender, EventArgs e)
        {
            this.Hook_Start();
        }

        void Clear_BtnClick(object sender, EventArgs e)
        {
            this.Hook_Clear();
        }
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杨航 AI

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值