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日

相关文章

  • Asp.Net数据控件引用AspNetPager.dll分页实现代码

    当我们需要在ASP.NET应用程序中使用分页功能时,可以使用第三方控件,其中一个比较流行的控件就是AspNetPager.dll。以下是使用AspNetPager.dll控件实现分页的完整攻略: 1. 引用AspNetPager.dll控件 首先需要在项目中引用AspNetPager.dll控件,可以通过NuGet包管理器来进行安装。在Visual Stud…

    C# 2023年5月31日
    00
  • ASP.NET Core MVC如何实现运行时动态定义Controller类型

    ASP.NET Core MVC是一款开源的高性能Web框架,使用C#语言编写,它支持运行在Windows、Linux和macOS操作系统上,为 Web 开发提供了高效、灵活、安全的解决方案。ASP.NET Core MVC的一个重要特点就是支持在运行时动态定义Controller类型。下面是实现该功能的完整攻略和两条示例说明。 1. 动态定义Control…

    C# 2023年5月31日
    00
  • c#使用正则表达式匹配字符串验证URL示例

    下面是详细讲解c#使用正则表达式匹配字符串验证URL的完整攻略。 什么是正则表达式 正则表达式是一种用于匹配文本的工具,它可以用来查找、替换或者检测文本中符合特定格式的字符串。 在c#中,.NET框架提供了使用正则表达式的类库,通过这些类库可以方便的进行字符串匹配的操作。 如何使用正则表达式匹配URL 在c#中,我们可以使用Match类提供的方法来进行正则表…

    C# 2023年6月8日
    00
  • 分享WCF聊天程序–WCFChat实现代码

    WCF(Windows Communication Foundation)是一种用于构建分布式应用程序的框架。WCF可以用于实现各种功能,包括聊天程序。本文将介绍如何使用WCF实现聊天程序,并分享一个名为WCFChat的示例项目。 WCFChat项目介绍 WCFChat是一个使用WCF实现聊天程序的示例项目。该项目包括两个应用程序:WCFChat.Serve…

    C# 2023年5月15日
    00
  • C#实现类似qq的屏幕截图程序

    下面是“C#实现类似qq的屏幕截图程序”的完整攻略: 1.概述 通常实现屏幕截图的方式是利用系统API,将当前屏幕截图保存至剪切板中,进而另行操作。需要说明的是,虽然C#中提供了WinForm等快速开发工具,但利用系统API会是更加底层、高效的方法。 2.实现步骤 2.1.注册快捷键 用户在截图的时候经常需要使用快捷键配合,所以先来一段注册程序快捷键的代码。…

    C# 2023年6月6日
    00
  • Unity 使用tiledmap解析地图的详细过程

    下面是Unity使用Tiled Map解析地图的详细过程。 什么是Tiled Map Tiled Map是一个开源的地图编辑器,可以用来创建2D地图,支持多种地图格式,并可以导出为多种数据格式,如XML、JSON等。Unity可以使用Tiled Map导出的地图数据文件解析出游戏世界中的2D地图。 Unity如何使用Tiled Map解析地图 Unity可以…

    C# 2023年5月31日
    00
  • ASP.NET Core – 缓存之内存缓存(下)

    话接上篇 [ASP.NET Core – 缓存之内存缓存(上)],所以这里的目录从 2.4 开始。 2.4 MemoryCacheEntryOptions MemoryCacheEntryOptions 是内存缓存配置类,可以通过它配置缓存相关的策略。除了上面讲到的过期时间,我们还能够设置下面这些: 设置缓存优先级。 设置在从缓存中逐出条目后调用的 Post…

    C# 2023年4月17日
    00
  • 三十分钟快速掌握C# 6.0知识点

    三十分钟快速掌握C#6.0知识点攻略 1. 概述 C#6.0是微软为.NET开发的一种编程语言,它提供了许多便利的功能、操作符、语法糖和程序集。掌握C#6.0的知识对C#开发者来说是非常重要的。在这个攻略中,我们将介绍C#6.0的一些主要特性。 2. 字符串的插入 在C#6.0中,我们可以使用“$”字符来插入表达式和变量到字符串中,这个特性被称为字符串插入(…

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