下面是一个示例代码,演示如何编写一个C#控制台应用程序发送一个左键单击:
using System;
using System.Runtime.InteropServices;
class Program
{
// 导入user32.dll库中的SendInput函数
[DllImport("user32.dll", SetLastError = true)]
static extern uint SendInput(uint nInputs, INPUT[] pInputs, int cbSize);
static void Main()
{
// 创建一个输入结构体
INPUT input = new INPUT();
input.type = InputType.MOUSE;
input.mi.dx = 0;
input.mi.dy = 0;
input.mi.dwFlags = MouseEventFlags.LEFTDOWN | MouseEventFlags.LEFTUP;
input.mi.mouseData = 0;
input.mi.dwExtraInfo = IntPtr.Zero;
input.mi.time = 0;
// 发送输入
SendInput(1, new INPUT[] { input }, Marshal.SizeOf(input));
}
}
// 输入结构体
[StructLayout(LayoutKind.Sequential)]
struct INPUT
{
public InputType type;
public MouseInput mi;
}
// 鼠标输入结构体
[StructLayout(LayoutKind.Sequential)]
struct MouseInput
{
public int dx;
public int dy;
public uint mouseData;
public MouseEventFlags dwFlags;
public uint time;
public IntPtr dwExtraInfo;
}
// 输入类型枚举
enum InputType : uint
{
MOUSE = 0,
KEYBOARD = 1,
HARDWARE = 2
}
// 鼠标事件标志枚举
[Flags]
enum MouseEventFlags : uint
{
LEFTDOWN = 0x0002,
LEFTUP = 0x0004,
MIDDLEDOWN = 0x0020,
MIDDLEUP = 0x0040,
RIGHTDOWN = 0x0008,
RIGHTUP = 0x0010,
WHEEL = 0x0800,
XDOWN = 0x0080,
XUP = 0x0100,
ABSOLUTE = 0x8000
}
这段代码使用了P/Invoke方式来调用user32.dll
库中的SendInput
函数,用于发送输入事件。在Main
方法中,我们创建了一个INPUT
结构体,设置了鼠标左键按下和释放的标志位,然后调用SendInput
函数发送输入。