zoukankan      html  css  js  c++  java
  • 鼠标 hook 源码 C#版

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Runtime.InteropServices;
    using System.Text;
    using System.Windows.Forms;
    
    namespace MouseHook20200119
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            #region  所需
    
            public delegate int HookProc(int nCode, IntPtr wParam, IntPtr lParam);
            //整数14表示全局钩子类型,其他类型对应的数字可以从MicrosoftSDK中的Winuser.h头文件中查看
            public const int WH_MOUSE = 14;
            [DllImport("user32.dll")]
            public static extern int SetWindowsHookEx(int idHook, HookProc lpfn, IntPtr hInstance, int threadId);
            [DllImport("user32.dll")]
            public static extern bool UnhookWindowsHookEx(int idHook);
            [DllImport("user32.dll")]
            public static extern int CallNextHookEx(int idHook, int nCode, IntPtr wParam, IntPtr lParam);
            #endregion
    
            static int hHook = 0;
            private void Form1_Load(object sender, EventArgs e)
            {
            }
            StringBuilder sb = new StringBuilder();
            public int MouseHookProc(int nCode, IntPtr wParam, IntPtr lParam)
            {
                switch ((int)wParam)
                {
                    case 513: //0x201
                              //sb.AppendLine("鼠标左键按下");
    
                        break;
                    case 516://0x204
                        //sb.AppendLine("鼠标右键");
                        break;
                    case 519:
                        //sb.AppendLine("鼠标中键");
                        break;
                    case 514://0x202
                             //sb.AppendLine("鼠标左键松开");
    
                        break;
                    case 517:
                        //sb.AppendLine("鼠标右键");
                        break;
                    case 520:
                        //sb.AppendLine("鼠标中键");
                        break;
                }
                //var t = sb.ToString();
                //if (nCode < 0)
                //{
                //    return 1;
                //    //返回真;即截断消息传递,
                //    //否则不截断
                //    //return CallNextHookEx(hHook, nCode, wParam, lParam);
                //}
                //else
                //{
                //    return 1;
                //}
                return CallNextHookEx(hHook, nCode, wParam, lParam);
            }
            private void button1_Click(object sender, EventArgs e)
            {
                if (hHook == 0) //句柄未初始化
                {
                    hHook = SetWindowsHookEx(WH_MOUSE,
                       MouseHookProc,
                       IntPtr.Zero,
                       0
                        );
                }
                if (hHook > 0)
                {
                    MessageBox.Show("安装钩子成功!");
                }
            }
    
            private void button2_Click(object sender, EventArgs e)
            {
                UnhookWindowsHookEx(hHook);
                MessageBox.Show(hHook.ToString());
    
            }
        }
    }
  • 相关阅读:
    大规模分布式存储系统笔记一二章 概述与单机存储系统
    Apache Avro总结
    可汗学院公开课统计学笔记 第11到16集 样本 总体 方差 标准差 诸方差公式
    可汗学院公开课统计学笔记 第1到10集 均值 中位数 众数 极差 统计图
    Mock、Powermock使用汇总
    如何解决NoSuchMethodError
    2019年我看手机之华为篇
    活着
    log4j使用指北
    关于Eclipse导入maven项目报空指针异常
  • 原文地址:https://www.cnblogs.com/enych/p/12215566.html
Copyright © 2011-2022 走看看