using System;
using System.Runtime.InteropServices;
class Program
{
[DllImport("user32.dll", SetLastError = true)]
private static extern uint SendInput(uint nInputs, INPUT[] pInputs, int cbSize);
[StructLayout(LayoutKind.Sequential)]
struct INPUT
{
public uint type;
public MOUSEKEYBDHARDWAREINPUT data;
}
[StructLayout(LayoutKind.Explicit)]
struct MOUSEKEYBDHARDWAREINPUT
{
[FieldOffset(0)]
public MOUSEINPUT mi;
[FieldOffset(0)]
public KEYBDINPUT ki;
[FieldOffset(0)]
public HARDWAREINPUT hi;
}
[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 KEYBDINPUT
{
public ushort wVk;
public ushort wScan;
public uint dwFlags;
public uint time;
public IntPtr dwExtraInfo;
}
[StructLayout(LayoutKind.Sequential)]
struct HARDWAREINPUT
{
public uint uMsg;
public ushort wParamL;
public ushort wParamH;
}
const uint INPUT_MOUSE = 0;
const uint INPUT_KEYBOARD = 1;
const uint INPUT_HARDWARE = 2;
const uint MOUSEEVENTF_LEFTDOWN = 0x0002;
const uint MOUSEEVENTF_LEFTUP = 0x0004;
const uint KEYEVENTF_KEYUP = 0x0002;
static void Main()
{
// Example: Simulate a left mouse click
INPUT[] inputs = new INPUT[2];
inputs[0].type = INPUT_MOUSE;
inputs[0].data.mi.dx = 0;
inputs[0].data.mi.dy = 0;
inputs[0].data.mi.dwFlags = MOUSEEVENTF_LEFTDOWN;
inputs[0].data.mi.time = 0;
inputs[0].data.mi.dwExtraInfo = IntPtr.Zero;
inputs[1].type = INPUT_MOUSE;
inputs[1].data.mi.dx = 0;
inputs[1].data.mi.dy = 0;
inputs[1].data.mi.dwFlags = MOUSEEVENTF_LEFTUP;
inputs[1].data.mi.time = 0;
inputs[1].data.mi.dwExtraInfo = IntPtr.Zero;
SendInput((uint)inputs.Length, inputs, Marshal.SizeOf(typeof(INPUT)));
// Example: Simulate pressing and releasing the 'A' key
inputs = new INPUT[2];
inputs[0].type = INPUT_KEYBOARD;
inputs[0].data.ki.wVk = (ushort)'A';
inputs[0].data.ki.dwFlags = 0;
inputs[0].data.ki.time = 0;
inputs[0].data.ki.dwExtraInfo = IntPtr.Zero;
inputs[1].type = INPUT_KEYBOARD;
inputs[1].data.ki.wVk = (ushort)'A';
inputs[1].data.ki.dwFlags = KEYEVENTF_KEYUP;
inputs[1].data.ki.time = 0;
inputs[1].data.ki.dwExtraInfo = IntPtr.Zero;
SendInput((uint)inputs.Length, inputs, Marshal.SizeOf(typeof(INPUT)));
}
}
这段代码展示了如何使用 SendInput 函数模拟鼠标点击和键盘按键事件。以下是关键点的解释:
DllImport 导入 user32.dll 中的 SendInput 函数。INPUT, MOUSEKEYBDHARDWAREINPUT, MOUSEINPUT, KEYBDINPUT, 和 HARDWAREINPUT 结构体,用于传递输入事件的数据。INPUT 结构体,分别表示按下和释放鼠标左键,并调用 SendInput 发送这些事件。INPUT 结构体,分别表示按下和释放字母 'A' 键,并调用 SendInput 发送这些事件。这段代码可以在 C# 程序中用于模拟用户输入事件。
下一篇:c# aforge
Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3
Laravel 中文站