c#模拟鼠标点击左键

c#模拟鼠标点击左键,这里调用的是windows系统函数,

csharp 复制代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;

namespace WindowsFormsAppHalconJiaJuObjectDetection
{
    /// <summary>
    /// 模拟鼠标点击
    /// </summary>
    public class MyMouseClick
    {
        // 定义鼠标事件标志枚举
        [Flags]
        public enum MouseEventFlags : uint
        {
            Move = 0x0001,
            LeftDown = 0x0002,
            LeftUp = 0x0004,
            RightDown = 0x0008,
            RightUp = 0x0010,
            MiddleDown = 0x0020,
            MiddleUp = 0x0040,
            XDown = 0x0080,
            XUp = 0x0100,
            Wheel = 0x0800,
            VirtualDesk = 0x4000,
            Absolute = 0x8000
        }

        /// <summary>
        /// 移动鼠标到一个坐标
        /// </summary>
        /// <param name="X"></param>
        /// <param name="Y"></param>
        /// <returns></returns>        
        [DllImport("user32.dll")]
        public static extern bool SetCursorPos(int X, int Y);

        // 导入user32.dll中的mouse_event函数
        [DllImport("user32.dll")]
        public static extern void mouse_event(MouseEventFlags flags, int dx, int dy, uint data, UIntPtr extraInfo);

        

        //获取当前鼠标坐标, 导入user32.dll中的GetCursorPos函数
        [DllImport("user32.dll")]
        [return: MarshalAs(UnmanagedType.Bool)]
        public static extern bool GetCursorPos(out POINT lpPoint);

        // 定义POINT结构体
        [StructLayout(LayoutKind.Sequential)]
        public struct POINT
        {
            public int X;
            public int Y;
        }



        /// <summary>
        /// 点击鼠标左键
        /// </summary>
        /// <param name="x">坐标x</param>
        /// <param name="y">坐标y</param>
        public static void MouseLeftClick(int x,int y) {
            //移动鼠标到一个坐标
            SetCursorPos(x,y);
            //鼠标左键按下
            mouse_event(MouseEventFlags.LeftDown, 0, 0, 0, UIntPtr.Zero);
            //左键释放
            mouse_event(MouseEventFlags.LeftUp, 0, 0, 0, UIntPtr.Zero);             
        }

        /// <summary>
        /// 双击鼠标左键
        /// </summary>
        /// <param name="x"></param>
        /// <param name="y"></param>
        public static void MouseDoubleLeftClick(int x, int y)
        {
            MouseLeftClick(x,y);
            MouseLeftClick(x, y);
        }

    }
}
相关推荐
Eiceblue3 小时前
使用 C# 将 Excel 转换为 Markdown 表格(含批量转换示例)
开发语言·c#·excel
不会编程的懒洋洋5 小时前
WPF XAML+布局+控件
xml·开发语言·c#·视觉检测·wpf·机器视觉·视图
唐青枫5 小时前
别再层层传参了!C#.NET AsyncLocal 异步上下文透传实战
c#·.net
明如正午6 小时前
【C#】托管调试助手 “PInvokeStackImbalance“:的调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配。
c#
Eiceblue7 小时前
C# 如何实现 Word 转 Excel ?分享两种实用方法
c#·word·excel
天才少女爱迪生7 小时前
word格式规范检测+自动修改【python】
python·c#·word
用户3721574261357 小时前
如何使用 C# 转换 PowerPoint 为 HTML:完整指南
c#
软泡芙8 小时前
【C# 】各种等待大全:从入门到精通
开发语言·c#·log4j
夏霞9 小时前
IIS 应用程序池 3 种标识:ApplicationPoolIdentity / LocalSystem / LocalService 权限区别(超清晰)
c#·.net
SteveDraw9 小时前
常见的设计模式及工业场景下应用(更新中)
设计模式·c#·编码规范·gof23