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日

相关文章

  • C#中的委托和事件

    委托和事件的概念说明: 委托是一种类型,代表可以指向具有特定参数列表和返回类型的方法的引用,可以使方法的参数自由变化,可以做到比直接调用方法更灵活。 事件是一种特殊的委托,被用于实现发布者/订阅者模式,通过事件的注册和触发可以完成对象间的通信。 委托的声明和使用: 声明委托的语法:delegate returnType DelegateName(parame…

    C# 2023年5月15日
    00
  • asp.net core 修改默认端口的几种方法

    在ASP.NET Core中,可以通过多种方式修改默认端口。在本攻略中,我们将讨论几种修改默认端口的方法,并提供两个示例说明。 方法一:使用launchSettings.json文件 在ASP.NET Core中,可以使用launchSettings.json文件来配置应用程序的启动设置。以下是使用launchSettings.json文件修改默认端口的步骤…

    C# 2023年5月17日
    00
  • C# Random类随机函数实例详解

    C# Random类随机函数实例详解 在C#编程中,经常需要使用到随机数,C#中提供了Random类,可以非常方便地生成伪随机数。本文将针对C# Random类进行详细讲解,并附上两个示例说明。 1. Random类概述 Random类可以生成一个伪随机数序列。 随机数是一些不可预测的数字,它们是通过算法生成的,而不是通过任何物理过程生成的。 随机类的构造函…

    C# 2023年6月8日
    00
  • ASP.NET Core中如何利用多种方式给Action传参

    在ASP.NET Core中,您可以使用多种方式将参数传递给Action。以下是一些常见的方法: 1. 通过路由参数传递参数 在ASP.NET Core中,您可以通过路由参数将参数传递给Action。以下是一个示例: [Route("products/{id}")] public IActionResult GetProduct(int …

    C# 2023年5月17日
    00
  • ASP.NET Core应用JWT进行用户认证及Token的刷新方案

    下面我将为您详细讲解如何使用 ASP.NET Core 应用 JWT 进行用户认证及 Token 的刷新方案。 什么是 JWT? JWT (JSON Web Token) 是一个开放标准 (RFC 7519),用于在网络上传输声明 (Claims),通常用于身份认证。JWT 由三部分组成:头部 (Header)、载荷 (Payload) 和签名 (Signa…

    C# 2023年6月3日
    00
  • C#如何优雅的对WinForm窗体应用程序进行权限控制

    C#中对WinForm窗体应用程序进行权限控制的优雅方法主要有以下几个步骤: 1. 创建用户登录界面 在用户打开程序时,首先需要提供一个登录窗口,将用户的账号和密码发送给服务器验证。可以使用WinForm中的TextBox、Label和Button等工具来创建这个窗口。 2. 向接口获取用户权限信息 用户登录成功后,需要将用户的身份信息发送给服务器来获取用户…

    C# 2023年5月31日
    00
  • 详解ASP.Net Core 中如何借助CSRedis实现一个安全高效的分布式锁

    详解ASP.Net Core 中如何借助CSRedis实现一个安全高效的分布式锁 在ASP.Net Core应用程序中,分布式锁是一项非常重要的任务,它可以帮助您避免并发问题和数据竞争。CSRedis是一种流行的Redis客户端,它可以帮助我们实现分布式锁。在本攻略中,我们将详细讲解如何借助CSRedis实现一个安全高效的分布式锁,并提供两个示例说明。 步骤…

    C# 2023年5月17日
    00
  • .net core 3.1 Redis安装和简单使用

    以下是关于“.NET Core 3.1 Redis安装和简单使用”的完整攻略: 1. Redis 简介 Redis 是一种高性能的键值存储数据库,支持多种数据结构如字符串、哈希、列表、集合和有序集合等。 通常用于缓存、会话管理、消息队列和排行榜等场景。 2. Redis 安装 2.1 Windows 安装 在 Windows 上安装 Redis,可以从 Re…

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