zoukankan      html  css  js  c++  java
  • C#实现的鼠标钩子

    更新时间:2015年03月11日 14:33:47   投稿:hebedich    我要评论

    本文给大家分享的是使用C#实现鼠标钩子功能,程序已能获取鼠标坐标,其他就没别的功能了,有需要的小伙伴参考下吧。

    C#实现的鼠标钩子,可以获取鼠标在屏幕中的坐标,记得要以管理员权限运行才行

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Reflection;
    using System.Runtime.InteropServices;
    using System.Text;
    using System.Windows.Forms;
    namespace app01{
        public partial class Form1 : Form {
            public delegate int HookProc(int nCode, IntPtr wParam, IntPtr lParam);
            //定义钩子句柄
            public static int hHook = 0;
            //定义钩子类型
            public const int WH_MOUSE_LL = 14;
            public HookProc MyProcedure;
            //安装钩子
            [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);
            [StructLayout(LayoutKind.Sequential)]
            public class POINT{
                public int x;
                public int y;
            }
            [StructLayout(LayoutKind.Sequential)]
            public class MouseHookStruct {
                public POINT pt;
                public int hwnd;
                public int wHitTestCode;
                public int dwExtraInfo;
            }
            public Form1() {
                InitializeComponent();
            }
            private void button1_Click(object sender, EventArgs e) {
                if (hHook == 0) {
                    MyProcedure = new HookProc(this.MouseHookProc);
                    //这里挂节钩子
                    hHook = SetWindowsHookEx(WH_MOUSE_LL, MyProcedure, Marshal.GetHINSTANCE(Assembly.GetExecutingAssembly().GetModules()[0]), 0);
                    if (hHook == 0) {
                        MessageBox.Show("SetWindowsHookEx Failed");
                        return;
                    }
                    button1.Text = "卸载钩子";
                } else {
                    bool ret = UnhookWindowsHookEx(hHook);
                    if (ret == false){
                        MessageBox.Show("UnhookWindowsHookEx Failed");
                        return;
                    }
                    hHook = 0;
                    button1.Text = "安装钩子";
                }
            }
            public int MouseHookProc(int nCode, IntPtr wParam, IntPtr lParam) {
                MouseHookStruct MyMouseHookStruct = (MouseHookStruct)Marshal.PtrToStructure(lParam, typeof(MouseHookStruct));
                if (nCode < 0) {
                    return CallNextHookEx(hHook, nCode, wParam, lParam);
                } else {
                    String strCaption = "x = " + MyMouseHookStruct.pt.x.ToString("d") + "  y = " + MyMouseHookStruct.pt.y.ToString("d");
                    this.Text = strCaption;
                    return CallNextHookEx(hHook, nCode, wParam, lParam);
                }
            }
        }
    }
    
    
  • 相关阅读:
    yii2.0缓存的使用
    yii2.0框架where条件的使用
    yii2.0自带验证码使用
    spring中MessageSource的配置使用方法1[转]
    DOM、JDOM、DOM4J的区别
    探秘Java虚拟机——内存管理与垃圾回收
    MySQL开发规范和原则大全
    Java Classloader机制解析
    Junit之测试顺序---FixMethodOrder
    MySQL的btree索引和hash索引的区别
  • 原文地址:https://www.cnblogs.com/grj001/p/12224221.html
Copyright © 2011-2022 走看看