Laravel  
laravel
文档
数据库
架构
入门
php技术
    
Laravelphp
laravel / php / java / vue / mysql / linux / python / javascript / html / css / c++ / c#

c# sendinput

作者:妖孽少年   发布日期:2026-04-21   浏览:75

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 函数模拟鼠标点击和键盘按键事件。以下是关键点的解释:

  1. P/Invoke 声明:通过 DllImport 导入 user32.dll 中的 SendInput 函数。
  2. 结构体定义:定义了 INPUT, MOUSEKEYBDHARDWAREINPUT, MOUSEINPUT, KEYBDINPUT, 和 HARDWAREINPUT 结构体,用于传递输入事件的数据。
  3. 常量定义:定义了一些常量来表示不同的输入类型和事件标志。
  4. 模拟鼠标点击:创建两个 INPUT 结构体,分别表示按下和释放鼠标左键,并调用 SendInput 发送这些事件。
  5. 模拟键盘按键:创建两个 INPUT 结构体,分别表示按下和释放字母 'A' 键,并调用 SendInput 发送这些事件。

这段代码可以在 C# 程序中用于模拟用户输入事件。

上一篇:c# foreach continue

下一篇:c# aforge

大家都在看

c# 二进制

c# 创建目录

c# socket服务端连接多个客户端

c# datatable group by

c# tcp client

c# type.gettype

c# sqlconnection

c# string.format 小数位数

c# invoke方法

.net和c#

Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3

Laravel 中文站