返回
在Windows上模拟键盘和鼠标输入事件
后端
2024-01-19 23:52:45
1. 导入必要的库
在 Visual Studio 中,您需要导入以下库:
using System;
using System.Runtime.InteropServices;
2. 定义 SendInput 结构
SendInput 结构定义了要模拟的输入事件。它包含以下字段:
type
:指定要模拟的输入类型。键盘事件的类型为 INPUT_KEYBOARD,鼠标事件的类型为 INPUT_MOUSE。mi
:包含键盘或鼠标事件的详细信息。ki
:包含键盘事件的详细信息。di
:包含鼠标事件的详细信息。
3. 创建 SendInput 结构
要创建 SendInput 结构,您可以使用以下代码:
[DllImport("user32.dll")]
private static extern uint SendInput(uint nInputs, SendInput[] pInputs, int cbSize);
private struct SendInput
{
public int type;
public MouseKeybdhardwareInputUnion mi;
}
[StructLayout(LayoutKind.Explicit)]
private struct MouseKeybdhardwareInputUnion
{
[FieldOffset(0)]
public MouseInputData mi;
[FieldOffset(0)]
public KeybdInputData ki;
[FieldOffset(0)]
public HardwareInputData hi;
}
[StructLayout(LayoutKind.Sequential)]
private struct MouseInputData
{
public int dx;
public int dy;
public uint mouseData;
public uint dwFlags;
public uint time;
public IntPtr dwExtraInfo;
}
[StructLayout(LayoutKind.Sequential)]
private struct KeybdInputData
{
public ushort wVk;
public ushort wScan;
public uint dwFlags;
public uint time;
public IntPtr dwExtraInfo;
}
[StructLayout(LayoutKind.Sequential)]
private struct HardwareInputData
{
public uint uMsg;
public ushort wParamL;
public ushort wParamH;
}
4. 设置 SendInput 结构的字段
要设置 SendInput 结构的字段,您可以使用以下代码:
SendInput si = new SendInput();
si.type = INPUT_KEYBOARD;
si.mi.ki.wVk = VK_A;
si.mi.ki.dwFlags = 0;
5. 调用 SendInput 函数
要调用 SendInput 函数,您可以使用以下代码:
SendInput(1, new SendInput[] { si }, Marshal.SizeOf(typeof(SendInput)));
这将模拟按下键盘上的“A”键。
6. 模拟鼠标输入事件
要模拟鼠标输入事件,您可以使用以下代码:
SendInput si = new SendInput();
si.type = INPUT_MOUSE;
si.mi.mi.dx = 100;
si.mi.mi.dy = 100;
si.mi.mi.mouseData = 0;
si.mi.mi.dwFlags = MOUSEEVENTF_MOVE;
SendInput(1, new SendInput[] { si }, Marshal.SizeOf(typeof(SendInput)));
这将模拟将鼠标指针移动到屏幕上的 (100, 100) 位置。