C# SendInput 模拟鼠标操作的实现方法

C# SendInput 模拟鼠标操作的实现方法

1. SendInput 简介

SendInput 是 Windows API 提供的一个函数,可以模拟键盘、鼠标等输入设备的操作。使用它可以实现一些自动化测试,或者模拟用户的鼠标和键盘操作。

使用 SendInput 函数需要先安装 InputSimulator 库,可以通过 NuGet 包管理器安装。

2. 模拟鼠标点击

下面是一个简单的示例代码,用于演示如何使用 SendInput 模拟鼠标点击:

using System;
using System.Runtime.InteropServices;

namespace MouseClickSimulation
{
    class Program
    {
        [DllImport("user32.dll", SetLastError = true)]
        static extern uint SendInput(uint nInputs, INPUT[] pInputs, int cbSize);

        [StructLayout(LayoutKind.Sequential)]
        struct MOUSEINPUT
        {
            public int dx;
            public int dy;
            public uint mouseData;
            public uint dwFlags;
            public uint time;
            public IntPtr dwExtraInfo;
        }

        [StructLayout(LayoutKind.Sequential)]
        struct INPUT
        {
            public uint type;
            public MOUSEINPUT mi;
        }

        static void Main(string[] args)
        {
            INPUT input = new INPUT();
            input.type = 0; // Mouse
            input.mi.dx = 0;
            input.mi.dy = 0;
            input.mi.mouseData = 0;
            input.mi.dwFlags = 0x0002; // Left Down
            input.mi.time = 0;
            input.mi.dwExtraInfo = IntPtr.Zero;

            uint intReturn = SendInput(1, new INPUT[] { input }, Marshal.SizeOf(new INPUT()));
            if (intReturn == 0)
            {
                Console.WriteLine("SendInput failed.");
            }
            else
            {
                Console.WriteLine("SendInput succeeded.");
            }
        }
    }
}

上述代码演示了如何模拟鼠标左键单击事件,具体实现方法是通过设置 dwFlags 来实现,0x0002 表示鼠标左键按下,0x0004 表示鼠标左键放开。

3. 模拟鼠标移动

下面是一个示例代码,用于演示如何使用 SendInput 模拟鼠标移动:

using System;
using System.Runtime.InteropServices;

namespace MouseMoveSimulation
{
    class Program
    {
        [DllImport("user32.dll", SetLastError = true)]
        static extern uint SendInput(uint nInputs, INPUT[] pInputs, int cbSize);

        [StructLayout(LayoutKind.Sequential)]
        struct MOUSEINPUT
        {
            public int dx;
            public int dy;
            public uint mouseData;
            public uint dwFlags;
            public uint time;
            public IntPtr dwExtraInfo;
        }

        [StructLayout(LayoutKind.Sequential)]
        struct INPUT
        {
            public uint type;
            public MOUSEINPUT mi;
        }

        static void Main(string[] args)
        {
            INPUT input = new INPUT();
            input.type = 0; // Mouse
            input.mi.dx = 100;
            input.mi.dy = 100;
            input.mi.mouseData = 0;
            input.mi.dwFlags = 0x0001; // Move
            input.mi.time = 0;
            input.mi.dwExtraInfo = IntPtr.Zero;

            uint intReturn = SendInput(1, new INPUT[] { input }, Marshal.SizeOf(new INPUT()));
            if (intReturn == 0)
            {
                Console.WriteLine("SendInput failed.");
            }
            else
            {
                Console.WriteLine("SendInput succeeded.");
            }
        }
    }
}

上述代码演示了如何模拟鼠标移动,具体实现方法是通过设置 dx 和 dy 为鼠标移动的相对距离, dwFlags 设置为 0x0001 表示鼠标移动。

4. 总结

本文介绍了使用 C# SendInput 模拟鼠标操作的实现方法,包括模拟鼠标点击和模拟鼠标移动。使用 SendInput 需要引用 user32.dll 库,并且需要了解输入事件(INPUT)结构体的定义和使用方法。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C# SendInput 模拟鼠标操作的实现方法 - Python技术站

(0)
上一篇 2023年6月6日
下一篇 2023年6月6日

相关文章

  • 如何将Winform移植到.NET Core 3.0

    将Winform移植到.NET Core 3.0的完整攻略如下: 确认.NET Core 3.0 SDK已安装 在开始移植之前,需要确认已安装.NET Core 3.0 SDK。您可以在命令行中运行以下命令来检查是否已安装.NET Core 3.0 SDK: dotnet –version 如果输出的版本号为3.0或更高版本,则.NET Core 3.0 …

    C# 2023年5月16日
    00
  • Win2003 R2 SP2 64位服务器系统 配置PHP+IIS6

    在Win2003R2SP264位服务器系统上配置PHP+IIS6需要以下步骤: 下载PHP安装包。从PHP官网下载适用于Windows的PHP安装包,选择与服务器操作系统和IIS版本相对应的版本。 安装PHP。运行PHP安装包,按照提示进行安装。在安装过程中,选择IIS FastCGI作为Web服务器接口。 配置IIS。打开IIS管理器,右键单击Web站点,…

    C# 2023年5月15日
    00
  • C#中volatile与lock用法

    下面详细讲解一下C#中volatile与lock关键字的用法。 volatile关键字的用法 简介 在多线程编程中,由于CPU对内存的读写可能存在缓存,当多个线程同时操作同一个变量时,就可能出现线程安全问题。而volatile关键字则可以保证被修饰的变量在多线程操作中的可见性和顺序性,即保证多线程程序中的变量修改都能在所有线程中可见。 用法 volatile…

    C# 2023年6月7日
    00
  • 递归输出ASP.NET页面所有控件的类型和ID的代码

    下面是详细讲解递归输出ASP.NET页面所有控件类型和ID的代码的攻略。 步骤一:创建一个空白的ASP.NET Web Forms页面 首先,打开Visual Studio,创建一个空白的ASP.NET Web Forms页面。 步骤二:添加递归遍历代码 在页面的代码文件中,添加以下C#代码: protected void Page_Load(object …

    C# 2023年5月31日
    00
  • 如何使用C#将Tensorflow训练的.pb文件用在生产环境详解

    我来为您详细讲解如何使用C#将Tensorflow训练的.pb文件用在生产环境。 背景介绍 Tensorflow是目前深度学习领域广泛使用的一个强大的开源库,它提供了许多的高级API和工具来帮助我们训练和使用深度学习模型。在Tensorflow中,模型可以被保存成一个.pb文件,该文件包含了模型的结构和参数信息,可以在需要的时候被载入到内存中进行推断。 在实…

    C# 2023年5月15日
    00
  • ASP.Net Core MVC基础系列之项目创建

    下面是“ASP.Net Core MVC基础系列之项目创建”的完整攻略。 1.安装Visual Studio Visual Studio是基于Windows的软件开发环境,它集成了一个完整的工具集,可以在Windows操作系统上设计、开发、测试和部署各种应用程序。因此,在学习ASP.Net Core MVC之前,必须先安装Visual Studio。 2.创…

    C# 2023年5月31日
    00
  • c#基于WinForm的Socket实现简单的聊天室 IM

    下面是基于WinForm的Socket实现简单聊天室IM的完整攻略: 1. 项目开发前准备 1.1 工具准备 首先确保你已经安装了以下工具: .NET Framework(版本3.5及以上): .NET Framework是Windows应用程序开发所必需的。 1.2 环境准备 在开始聊天室开发之前,请确认以下环境已经正确配置: 计算机命名或IP地址 端口号…

    C# 2023年5月15日
    00
  • ASP.NET中的参数与特殊类型和特性

    ASP.NET中的参数、特殊类型和特性是开发者在开发ASP.NET应用程序时经常需要面对的主题之一。在本篇文章中,我们将向你介绍有关这个主题的完整攻略,包括参数类型、自定义参数绑定、特殊类型对象和在ASP.NET中使用的常见特性。 参数类型 在ASP.NET中,我们可以使用一系列参数类型来接收和指定请求数据。常见的参数类型包括: 基础类型参数:这些参数包括字…

    C# 2023年5月15日
    00
合作推广
合作推广
分享本页
返回顶部