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技术站