介紹:
該程序本意是為了在彩六里打中文用的,現整理出來供大家復制粘貼。(源程序已開源至GitHub - 彩六中文輸入)
主要使用SendInput函數,與c語言中用法一致。(部分代碼來自網絡)
命名空間部分
using static System.Threading.Thread; using System.Runtime.InteropServices;
結構體和函數聲明部分
[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 time; 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 nInputs, INPUT[] pInputs, int cbSize);
自定義函數封裝部分
public void SimulateInputString(char c) { INPUT[] input = new INPUT[2]; input[0].type = 1; input[0].ki.wVk = 0;//dwFlags 為KEYEVENTF_UNICODE 即4時,wVk必須為0 input[0].ki.wScan = (short)c; input[0].ki.dwFlags = 4;//輸入UNICODE字符 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 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))); 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))); Sleep(50); }
說明:
SimulateInputString為發送單個字符文本;
SimulateInputKey為模擬按鍵按下和抬起,參數key為虛擬鍵碼;
關於鍵碼的列表,可以查看微軟文檔:https://docs.microsoft.com/en-us/windows/win32/inputdev/virtual-key-codes