1、Form调用
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace SendInput模拟输入字符与按键
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void button1_Click(object sender, EventArgs e)
{
int hWnd = FindWindow(null, "zshMain");
SetForegroundWindow(hWnd);
SendInputUtil.SimulateInputString("你好");
}
[DllImport("User32.dll", EntryPoint = "FindWindow")]
private static extern int FindWindow(string lpClassName, string lpWindowName);
[DllImport("user32.dll")]
public static extern bool SetForegroundWindow(int hWnd);
}
}
2、SendInputUtil
using System;
using System.Runtime.InteropServices;
using System.Threading;
namespace SendInput模拟输入字符与按键
{
public class SendInputUtil
{
#region 结构体和函数声明
[StructLayout(LayoutKind.Explicit)]
public struct INPUT
{
[FieldOffset(0)]
public int type;
[FieldOffset(4)]
public KEYBDINPUT ki;
[FieldOffset(4)]
public MOUSEINPUT mi;
[FieldOffset(4)]
public HARDWAREINPUT hi;
}
public struct MOUSEINPUT
{
public int dx;
public int dy;
public int mouseData;
public int dwFlags;
public int info;
public IntPtr dwExtraInfo;
}
public struct KEYBDINPUT
{
public short wVk;
public short wScan;
public int dwFlags;
public int time;
public IntPtr dwExtraInfo;
}
public struct HARDWAREINPUT
{
public int uMsg;
public short wParamL;
public short wParamH;
}
[DllImport("user32")]
public static extern uint SendInput(uint nlnputs, INPUT[] plnputs, int cbSize);
#endregion
#region 自定义函数封装
public static void SimulateInputString(char c)
{
INPUT[] input = new INPUT[2];
input[0].type = 1;
input[0].ki.wVk = 0;
input[0].ki.wScan = (short)c;
input[0].ki.dwFlags = 4;
input[0].ki.time = 0;
input[0].ki.dwExtraInfo = IntPtr.Zero;
input[1].type = 1;
input[1].ki.wVk = 0;
input[1].ki.wScan = (short)c;
input[1].ki.dwFlags = 6;
input[1].ki.time = 0;
input[1].ki.dwExtraInfo = IntPtr.Zero;
SendInput(2U, input, Marshal.SizeOf((object)default(INPUT)));
}
public static void SimulateInputString(string s)
{
foreach (var c in s)
{
INPUT[] input = new INPUT[2];
input[0].type = 1;
input[0].ki.wVk = 0;
input[0].ki.wScan = (short)c;
input[0].ki.dwFlags = 4;
input[0].ki.time = 0;
input[0].ki.dwExtraInfo = IntPtr.Zero;
input[1].type = 1;
input[1].ki.wVk = 0;
input[1].ki.wScan = (short)c;
input[1].ki.dwFlags = 6;
input[1].ki.time = 0;
input[1].ki.dwExtraInfo = IntPtr.Zero;
SendInput(2U, input, Marshal.SizeOf((object)default(INPUT)));
}
}
public static void SimulateInputKey(int key)
{
INPUT[] input = new INPUT[1];
input[0].type = 1;
input[0].ki.wVk = (short)key;
input[0].ki.dwFlags = 0;
SendInput(1U, input, Marshal.SizeOf((object)default(INPUT)));
Thread.Sleep(50);
input[0].type = 1;
input[0].ki.wVk = (short)key;
input[0].ki.dwFlags = 2;
SendInput(1U, input, Marshal.SizeOf((object)default(INPUT)));
Thread.Sleep(50);
}
#endregion
}
}