在C#中模拟键盘输入

我需要知道如何模拟键WSAD键盘输入。

我没有使用SendKeys ,也没有使用InputSimulator库而没有修复。

我正在尝试做的是将游戏(战场,自然选择等新的FPS游戏)等应用程序注册为真正的击键。 我正在尝试创建一个虚拟控制器程序,其中外部控件将注册为这些游戏的键盘输入。

有没有办法手动模拟键盘输入,就像有这样的东西?

 [DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)] public static extern void mouse_event(uint dwFlags, uint dx, uint dy, int cButtons, uint dwExtraInfo); 

我喜欢Gareth的做法。 但是,在他的方法中,您需要将您的击键硬编码到SendInputWithAPI()方法中。 我对代码做了一些修改; 您现在可以调用Send()并将ScanCodeShort参数传递给它。 这允许您随时随地将任何击键传递给它。

  public class Keyboard { public void Send(ScanCodeShort a) { INPUT[] Inputs = new INPUT[1]; INPUT Input = new INPUT(); Input.type = 1; // 1 = Keyboard Input Input.U.ki.wScan = a; Input.U.ki.dwFlags = KEYEVENTF.SCANCODE; Inputs[0] = Input; SendInput(1, Inputs, INPUT.Size); } ///  /// Declaration of external SendInput method ///  [DllImport("user32.dll")] internal static extern uint SendInput( uint nInputs, [MarshalAs(UnmanagedType.LPArray), In] INPUT[] pInputs, int cbSize); // Declare the INPUT struct [StructLayout(LayoutKind.Sequential)] public struct INPUT { public uint type; public InputUnion U; public static int Size { get { return Marshal.SizeOf(typeof(INPUT)); } } } // Declare the InputUnion struct [StructLayout(LayoutKind.Explicit)] public struct InputUnion { [FieldOffset(0)] internal MOUSEINPUT mi; [FieldOffset(0)] internal KEYBDINPUT ki; [FieldOffset(0)] internal HARDWAREINPUT hi; } [StructLayout(LayoutKind.Sequential)] public struct MOUSEINPUT { internal int dx; internal int dy; internal MouseEventDataXButtons mouseData; internal MOUSEEVENTF dwFlags; internal uint time; internal UIntPtr dwExtraInfo; } [Flags] public enum MouseEventDataXButtons : uint { Nothing = 0x00000000, XBUTTON1 = 0x00000001, XBUTTON2 = 0x00000002 } [Flags] public enum MOUSEEVENTF : uint { ABSOLUTE = 0x8000, HWHEEL = 0x01000, MOVE = 0x0001, MOVE_NOCOALESCE = 0x2000, LEFTDOWN = 0x0002, LEFTUP = 0x0004, RIGHTDOWN = 0x0008, RIGHTUP = 0x0010, MIDDLEDOWN = 0x0020, MIDDLEUP = 0x0040, VIRTUALDESK = 0x4000, WHEEL = 0x0800, XDOWN = 0x0080, XUP = 0x0100 } [StructLayout(LayoutKind.Sequential)] public struct KEYBDINPUT { internal VirtualKeyShort wVk; internal ScanCodeShort wScan; internal KEYEVENTF dwFlags; internal int time; internal UIntPtr dwExtraInfo; } [Flags] public enum KEYEVENTF : uint { EXTENDEDKEY = 0x0001, KEYUP = 0x0002, SCANCODE = 0x0008, UNICODE = 0x0004 } public enum VirtualKeyShort : short { /// ///Left mouse button /// LBUTTON = 0x01, /// ///Right mouse button /// RBUTTON = 0x02, /// ///Control-break processing /// CANCEL = 0x03, /// ///Middle mouse button (three-button mouse) /// MBUTTON = 0x04, /// ///Windows 2000/XP: X1 mouse button /// XBUTTON1 = 0x05, /// ///Windows 2000/XP: X2 mouse button /// XBUTTON2 = 0x06, /// ///BACKSPACE key /// BACK = 0x08, /// ///TAB key /// TAB = 0x09, /// ///CLEAR key /// CLEAR = 0x0C, /// ///ENTER key /// RETURN = 0x0D, /// ///SHIFT key /// SHIFT = 0x10, /// ///CTRL key /// CONTROL = 0x11, /// ///ALT key /// MENU = 0x12, /// ///PAUSE key /// PAUSE = 0x13, /// ///CAPS LOCK key /// CAPITAL = 0x14, /// ///Input Method Editor (IME) Kana mode /// KANA = 0x15, /// ///IME Hangul mode /// HANGUL = 0x15, /// ///IME Junja mode /// JUNJA = 0x17, /// ///IME final mode /// FINAL = 0x18, /// ///IME Hanja mode /// HANJA = 0x19, /// ///IME Kanji mode /// KANJI = 0x19, /// ///ESC key /// ESCAPE = 0x1B, /// ///IME convert /// CONVERT = 0x1C, /// ///IME nonconvert /// NONCONVERT = 0x1D, /// ///IME accept /// ACCEPT = 0x1E, /// ///IME mode change request /// MODECHANGE = 0x1F, /// ///SPACEBAR /// SPACE = 0x20, /// ///PAGE UP key /// PRIOR = 0x21, /// ///PAGE DOWN key /// NEXT = 0x22, /// ///END key /// END = 0x23, /// ///HOME key /// HOME = 0x24, /// ///LEFT ARROW key /// LEFT = 0x25, /// ///UP ARROW key /// UP = 0x26, /// ///RIGHT ARROW key /// RIGHT = 0x27, /// ///DOWN ARROW key /// DOWN = 0x28, /// ///SELECT key /// SELECT = 0x29, /// ///PRINT key /// PRINT = 0x2A, /// ///EXECUTE key /// EXECUTE = 0x2B, /// ///PRINT SCREEN key /// SNAPSHOT = 0x2C, /// ///INS key /// INSERT = 0x2D, /// ///DEL key /// DELETE = 0x2E, /// ///HELP key /// HELP = 0x2F, /// ///0 key /// KEY_0 = 0x30, /// ///1 key /// KEY_1 = 0x31, /// ///2 key /// KEY_2 = 0x32, /// ///3 key /// KEY_3 = 0x33, /// ///4 key /// KEY_4 = 0x34, /// ///5 key /// KEY_5 = 0x35, /// ///6 key /// KEY_6 = 0x36, /// ///7 key /// KEY_7 = 0x37, /// ///8 key /// KEY_8 = 0x38, /// ///9 key /// KEY_9 = 0x39, /// ///A key /// KEY_A = 0x41, /// ///B key /// KEY_B = 0x42, /// ///C key /// KEY_C = 0x43, /// ///D key /// KEY_D = 0x44, /// ///E key /// KEY_E = 0x45, /// ///F key /// KEY_F = 0x46, /// ///G key /// KEY_G = 0x47, /// ///H key /// KEY_H = 0x48, /// ///I key /// KEY_I = 0x49, /// ///J key /// KEY_J = 0x4A, /// ///K key /// KEY_K = 0x4B, /// ///L key /// KEY_L = 0x4C, /// ///M key /// KEY_M = 0x4D, /// ///N key /// KEY_N = 0x4E, /// ///O key /// KEY_O = 0x4F, /// ///P key /// KEY_P = 0x50, /// ///Q key /// KEY_Q = 0x51, /// ///R key /// KEY_R = 0x52, /// ///S key /// KEY_S = 0x53, /// ///T key /// KEY_T = 0x54, /// ///U key /// KEY_U = 0x55, /// ///V key /// KEY_V = 0x56, /// ///W key /// KEY_W = 0x57, /// ///X key /// KEY_X = 0x58, /// ///Y key /// KEY_Y = 0x59, /// ///Z key /// KEY_Z = 0x5A, /// ///Left Windows key (Microsoft Natural keyboard) /// LWIN = 0x5B, /// ///Right Windows key (Natural keyboard) /// RWIN = 0x5C, /// ///Applications key (Natural keyboard) /// APPS = 0x5D, /// ///Computer Sleep key /// SLEEP = 0x5F, /// ///Numeric keypad 0 key /// NUMPAD0 = 0x60, /// ///Numeric keypad 1 key /// NUMPAD1 = 0x61, /// ///Numeric keypad 2 key /// NUMPAD2 = 0x62, /// ///Numeric keypad 3 key /// NUMPAD3 = 0x63, /// ///Numeric keypad 4 key /// NUMPAD4 = 0x64, /// ///Numeric keypad 5 key /// NUMPAD5 = 0x65, /// ///Numeric keypad 6 key /// NUMPAD6 = 0x66, /// ///Numeric keypad 7 key /// NUMPAD7 = 0x67, /// ///Numeric keypad 8 key /// NUMPAD8 = 0x68, /// ///Numeric keypad 9 key /// NUMPAD9 = 0x69, /// ///Multiply key /// MULTIPLY = 0x6A, /// ///Add key /// ADD = 0x6B, /// ///Separator key /// SEPARATOR = 0x6C, /// ///Subtract key /// SUBTRACT = 0x6D, /// ///Decimal key /// DECIMAL = 0x6E, /// ///Divide key /// DIVIDE = 0x6F, /// ///F1 key /// F1 = 0x70, /// ///F2 key /// F2 = 0x71, /// ///F3 key /// F3 = 0x72, /// ///F4 key /// F4 = 0x73, /// ///F5 key /// F5 = 0x74, /// ///F6 key /// F6 = 0x75, /// ///F7 key /// F7 = 0x76, /// ///F8 key /// F8 = 0x77, /// ///F9 key /// F9 = 0x78, /// ///F10 key /// F10 = 0x79, /// ///F11 key /// F11 = 0x7A, /// ///F12 key /// F12 = 0x7B, /// ///F13 key /// F13 = 0x7C, /// ///F14 key /// F14 = 0x7D, /// ///F15 key /// F15 = 0x7E, /// ///F16 key /// F16 = 0x7F, /// ///F17 key /// F17 = 0x80, /// ///F18 key /// F18 = 0x81, /// ///F19 key /// F19 = 0x82, /// ///F20 key /// F20 = 0x83, /// ///F21 key /// F21 = 0x84, /// ///F22 key, (PPC only) Key used to lock device. /// F22 = 0x85, /// ///F23 key /// F23 = 0x86, /// ///F24 key /// F24 = 0x87, /// ///NUM LOCK key /// NUMLOCK = 0x90, /// ///SCROLL LOCK key /// SCROLL = 0x91, /// ///Left SHIFT key /// LSHIFT = 0xA0, /// ///Right SHIFT key /// RSHIFT = 0xA1, /// ///Left CONTROL key /// LCONTROL = 0xA2, /// ///Right CONTROL key /// RCONTROL = 0xA3, /// ///Left MENU key /// LMENU = 0xA4, /// ///Right MENU key /// RMENU = 0xA5, /// ///Windows 2000/XP: Browser Back key /// BROWSER_BACK = 0xA6, /// ///Windows 2000/XP: Browser Forward key /// BROWSER_FORWARD = 0xA7, /// ///Windows 2000/XP: Browser Refresh key /// BROWSER_REFRESH = 0xA8, /// ///Windows 2000/XP: Browser Stop key /// BROWSER_STOP = 0xA9, /// ///Windows 2000/XP: Browser Search key /// BROWSER_SEARCH = 0xAA, /// ///Windows 2000/XP: Browser Favorites key /// BROWSER_FAVORITES = 0xAB, /// ///Windows 2000/XP: Browser Start and Home key /// BROWSER_HOME = 0xAC, /// ///Windows 2000/XP: Volume Mute key /// VOLUME_MUTE = 0xAD, /// ///Windows 2000/XP: Volume Down key /// VOLUME_DOWN = 0xAE, /// ///Windows 2000/XP: Volume Up key /// VOLUME_UP = 0xAF, /// ///Windows 2000/XP: Next Track key /// MEDIA_NEXT_TRACK = 0xB0, /// ///Windows 2000/XP: Previous Track key /// MEDIA_PREV_TRACK = 0xB1, /// ///Windows 2000/XP: Stop Media key /// MEDIA_STOP = 0xB2, /// ///Windows 2000/XP: Play/Pause Media key /// MEDIA_PLAY_PAUSE = 0xB3, /// ///Windows 2000/XP: Start Mail key /// LAUNCH_MAIL = 0xB4, /// ///Windows 2000/XP: Select Media key /// LAUNCH_MEDIA_SELECT = 0xB5, /// ///Windows 2000/XP: Start Application 1 key /// LAUNCH_APP1 = 0xB6, /// ///Windows 2000/XP: Start Application 2 key /// LAUNCH_APP2 = 0xB7, /// ///Used for miscellaneous characters; it can vary by keyboard. /// OEM_1 = 0xBA, /// ///Windows 2000/XP: For any country/region, the '+' key /// OEM_PLUS = 0xBB, /// ///Windows 2000/XP: For any country/region, the ',' key /// OEM_COMMA = 0xBC, /// ///Windows 2000/XP: For any country/region, the '-' key /// OEM_MINUS = 0xBD, /// ///Windows 2000/XP: For any country/region, the '.' key /// OEM_PERIOD = 0xBE, /// ///Used for miscellaneous characters; it can vary by keyboard. /// OEM_2 = 0xBF, /// ///Used for miscellaneous characters; it can vary by keyboard. /// OEM_3 = 0xC0, /// ///Used for miscellaneous characters; it can vary by keyboard. /// OEM_4 = 0xDB, /// ///Used for miscellaneous characters; it can vary by keyboard. /// OEM_5 = 0xDC, /// ///Used for miscellaneous characters; it can vary by keyboard. /// OEM_6 = 0xDD, /// ///Used for miscellaneous characters; it can vary by keyboard. /// OEM_7 = 0xDE, /// ///Used for miscellaneous characters; it can vary by keyboard. /// OEM_8 = 0xDF, /// ///Windows 2000/XP: Either the angle bracket key or the backslash key on the RT 102-key keyboard /// OEM_102 = 0xE2, /// ///Windows 95/98/Me, Windows NT 4.0, Windows 2000/XP: IME PROCESS key /// PROCESSKEY = 0xE5, /// ///Windows 2000/XP: Used to pass Unicode characters as if they were keystrokes. ///The VK_PACKET key is the low word of a 32-bit Virtual Key value used for non-keyboard input methods. For more information, ///see Remark in KEYBDINPUT, SendInput, WM_KEYDOWN, and WM_KEYUP /// PACKET = 0xE7, /// ///Attn key /// ATTN = 0xF6, /// ///CrSel key /// CRSEL = 0xF7, /// ///ExSel key /// EXSEL = 0xF8, /// ///Erase EOF key /// EREOF = 0xF9, /// ///Play key /// PLAY = 0xFA, /// ///Zoom key /// ZOOM = 0xFB, /// ///Reserved /// NONAME = 0xFC, /// ///PA1 key /// PA1 = 0xFD, /// ///Clear key /// OEM_CLEAR = 0xFE } public enum ScanCodeShort : short { LBUTTON = 0, RBUTTON = 0, CANCEL = 70, MBUTTON = 0, XBUTTON1 = 0, XBUTTON2 = 0, BACK = 14, TAB = 15, CLEAR = 76, RETURN = 28, SHIFT = 42, CONTROL = 29, MENU = 56, PAUSE = 0, CAPITAL = 58, KANA = 0, HANGUL = 0, JUNJA = 0, FINAL = 0, HANJA = 0, KANJI = 0, ESCAPE = 1, CONVERT = 0, NONCONVERT = 0, ACCEPT = 0, MODECHANGE = 0, SPACE = 57, PRIOR = 73, NEXT = 81, END = 79, HOME = 71, LEFT = 75, UP = 72, RIGHT = 77, DOWN = 80, SELECT = 0, PRINT = 0, EXECUTE = 0, SNAPSHOT = 84, INSERT = 82, DELETE = 83, HELP = 99, KEY_0 = 11, KEY_1 = 2, KEY_2 = 3, KEY_3 = 4, KEY_4 = 5, KEY_5 = 6, KEY_6 = 7, KEY_7 = 8, KEY_8 = 9, KEY_9 = 10, KEY_A = 30, KEY_B = 48, KEY_C = 46, KEY_D = 32, KEY_E = 18, KEY_F = 33, KEY_G = 34, KEY_H = 35, KEY_I = 23, KEY_J = 36, KEY_K = 37, KEY_L = 38, KEY_M = 50, KEY_N = 49, KEY_O = 24, KEY_P = 25, KEY_Q = 16, KEY_R = 19, KEY_S = 31, KEY_T = 20, KEY_U = 22, KEY_V = 47, KEY_W = 17, KEY_X = 45, KEY_Y = 21, KEY_Z = 44, LWIN = 91, RWIN = 92, APPS = 93, SLEEP = 95, NUMPAD0 = 82, NUMPAD1 = 79, NUMPAD2 = 80, NUMPAD3 = 81, NUMPAD4 = 75, NUMPAD5 = 76, NUMPAD6 = 77, NUMPAD7 = 71, NUMPAD8 = 72, NUMPAD9 = 73, MULTIPLY = 55, ADD = 78, SEPARATOR = 0, SUBTRACT = 74, DECIMAL = 83, DIVIDE = 53, F1 = 59, F2 = 60, F3 = 61, F4 = 62, F5 = 63, F6 = 64, F7 = 65, F8 = 66, F9 = 67, F10 = 68, F11 = 87, F12 = 88, F13 = 100, F14 = 101, F15 = 102, F16 = 103, F17 = 104, F18 = 105, F19 = 106, F20 = 107, F21 = 108, F22 = 109, F23 = 110, F24 = 118, NUMLOCK = 69, SCROLL = 70, LSHIFT = 42, RSHIFT = 54, LCONTROL = 29, RCONTROL = 29, LMENU = 56, RMENU = 56, BROWSER_BACK = 106, BROWSER_FORWARD = 105, BROWSER_REFRESH = 103, BROWSER_STOP = 104, BROWSER_SEARCH = 101, BROWSER_FAVORITES = 102, BROWSER_HOME = 50, VOLUME_MUTE = 32, VOLUME_DOWN = 46, VOLUME_UP = 48, MEDIA_NEXT_TRACK = 25, MEDIA_PREV_TRACK = 16, MEDIA_STOP = 36, MEDIA_PLAY_PAUSE = 34, LAUNCH_MAIL = 108, LAUNCH_MEDIA_SELECT = 109, LAUNCH_APP1 = 107, LAUNCH_APP2 = 33, OEM_1 = 39, OEM_PLUS = 13, OEM_COMMA = 51, OEM_MINUS = 12, OEM_PERIOD = 52, OEM_2 = 53, OEM_3 = 41, OEM_4 = 26, OEM_5 = 43, OEM_6 = 27, OEM_7 = 40, OEM_8 = 0, OEM_102 = 86, PROCESSKEY = 0, PACKET = 0, ATTN = 0, CRSEL = 0, EXSEL = 0, EREOF = 93, PLAY = 0, ZOOM = 98, NONAME = 0, PA1 = 0, OEM_CLEAR = 0, } ///  /// Define HARDWAREINPUT struct ///  [StructLayout(LayoutKind.Sequential)] public struct HARDWAREINPUT { internal int uMsg; internal short wParamL; internal short wParamH; } } 

您是否尝试使用取代keybd_event SendInput

要从C#调用SendInput,您将需要创建一大堆结构。 幸运的是,大部分信息都可以从pinvoke.net收集。

看看SendInput和INPUT结构的pinvoke文档,我想出了以下内容。 我在顶部写的名为SendInputWithAPI的方法是调用SendInput来模拟发送“wsad”。 代码的其余部分只是使其工作所需的结构声明。

  void SendInputWithAPI() { INPUT[] Inputs = new INPUT[4]; INPUT Input = new INPUT(); Input.type = 1; // 1 = Keyboard Input Input.U.ki.wScan = ScanCodeShort.KEY_W; Input.U.ki.dwFlags = KEYEVENTF.SCANCODE; Inputs[0] = Input; Input.type = 1; // 1 = Keyboard Input Input.U.ki.wScan = ScanCodeShort.KEY_S; Input.U.ki.dwFlags = KEYEVENTF.SCANCODE; Inputs[1] = Input; Input.type = 1; // 1 = Keyboard Input Input.U.ki.wScan = ScanCodeShort.KEY_A; Input.U.ki.dwFlags = KEYEVENTF.SCANCODE; Inputs[2] = Input; Input.type = 1; // 1 = Keyboard Input Input.U.ki.wScan = ScanCodeShort.KEY_D; Input.U.ki.dwFlags = KEYEVENTF.SCANCODE; Inputs[3] = Input; SendInput(4, Inputs, INPUT.Size); } ///  /// Declaration of external SendInput method ///  [DllImport("user32.dll")] internal static extern uint SendInput( uint nInputs, [MarshalAs(UnmanagedType.LPArray), In] INPUT[] pInputs, int cbSize); // Declare the INPUT struct [StructLayout(LayoutKind.Sequential)] public struct INPUT { internal uint type; internal InputUnion U; internal static int Size { get { return Marshal.SizeOf(typeof(INPUT)); } } } // Declare the InputUnion struct [StructLayout(LayoutKind.Explicit)] internal struct InputUnion { [FieldOffset(0)] internal MOUSEINPUT mi; [FieldOffset(0)] internal KEYBDINPUT ki; [FieldOffset(0)] internal HARDWAREINPUT hi; } [StructLayout(LayoutKind.Sequential)] internal struct MOUSEINPUT { internal int dx; internal int dy; internal MouseEventDataXButtons mouseData; internal MOUSEEVENTF dwFlags; internal uint time; internal UIntPtr dwExtraInfo; } [Flags] internal enum MouseEventDataXButtons : uint { Nothing = 0x00000000, XBUTTON1 = 0x00000001, XBUTTON2 = 0x00000002 } [Flags] internal enum MOUSEEVENTF : uint { ABSOLUTE = 0x8000, HWHEEL = 0x01000, MOVE = 0x0001, MOVE_NOCOALESCE = 0x2000, LEFTDOWN = 0x0002, LEFTUP = 0x0004, RIGHTDOWN = 0x0008, RIGHTUP = 0x0010, MIDDLEDOWN = 0x0020, MIDDLEUP = 0x0040, VIRTUALDESK = 0x4000, WHEEL = 0x0800, XDOWN = 0x0080, XUP = 0x0100 } [StructLayout(LayoutKind.Sequential)] internal struct KEYBDINPUT { internal VirtualKeyShort wVk; internal ScanCodeShort wScan; internal KEYEVENTF dwFlags; internal int time; internal UIntPtr dwExtraInfo; } [Flags] internal enum KEYEVENTF : uint { EXTENDEDKEY = 0x0001, KEYUP = 0x0002, SCANCODE = 0x0008, UNICODE = 0x0004 } internal enum VirtualKeyShort : short { /// ///Left mouse button /// LBUTTON = 0x01, /// ///Right mouse button /// RBUTTON = 0x02, /// ///Control-break processing /// CANCEL = 0x03, /// ///Middle mouse button (three-button mouse) /// MBUTTON = 0x04, /// ///Windows 2000/XP: X1 mouse button /// XBUTTON1 = 0x05, /// ///Windows 2000/XP: X2 mouse button /// XBUTTON2 = 0x06, /// ///BACKSPACE key /// BACK = 0x08, /// ///TAB key /// TAB = 0x09, /// ///CLEAR key /// CLEAR = 0x0C, /// ///ENTER key /// RETURN = 0x0D, /// ///SHIFT key /// SHIFT = 0x10, /// ///CTRL key /// CONTROL = 0x11, /// ///ALT key /// MENU = 0x12, /// ///PAUSE key /// PAUSE = 0x13, /// ///CAPS LOCK key /// CAPITAL = 0x14, /// ///Input Method Editor (IME) Kana mode /// KANA = 0x15, /// ///IME Hangul mode /// HANGUL = 0x15, /// ///IME Junja mode /// JUNJA = 0x17, /// ///IME final mode /// FINAL = 0x18, /// ///IME Hanja mode /// HANJA = 0x19, /// ///IME Kanji mode /// KANJI = 0x19, /// ///ESC key /// ESCAPE = 0x1B, /// ///IME convert /// CONVERT = 0x1C, /// ///IME nonconvert /// NONCONVERT = 0x1D, /// ///IME accept /// ACCEPT = 0x1E, /// ///IME mode change request /// MODECHANGE = 0x1F, /// ///SPACEBAR /// SPACE = 0x20, /// ///PAGE UP key /// PRIOR = 0x21, /// ///PAGE DOWN key /// NEXT = 0x22, /// ///END key /// END = 0x23, /// ///HOME key /// HOME = 0x24, /// ///LEFT ARROW key /// LEFT = 0x25, /// ///UP ARROW key /// UP = 0x26, /// ///RIGHT ARROW key /// RIGHT = 0x27, /// ///DOWN ARROW key /// DOWN = 0x28, /// ///SELECT key /// SELECT = 0x29, /// ///PRINT key /// PRINT = 0x2A, /// ///EXECUTE key /// EXECUTE = 0x2B, /// ///PRINT SCREEN key /// SNAPSHOT = 0x2C, /// ///INS key /// INSERT = 0x2D, /// ///DEL key /// DELETE = 0x2E, /// ///HELP key /// HELP = 0x2F, /// ///0 key /// KEY_0 = 0x30, /// ///1 key /// KEY_1 = 0x31, /// ///2 key /// KEY_2 = 0x32, /// ///3 key /// KEY_3 = 0x33, /// ///4 key /// KEY_4 = 0x34, /// ///5 key /// KEY_5 = 0x35, /// ///6 key /// KEY_6 = 0x36, /// ///7 key /// KEY_7 = 0x37, /// ///8 key /// KEY_8 = 0x38, /// ///9 key /// KEY_9 = 0x39, /// ///A key /// KEY_A = 0x41, /// ///B key /// KEY_B = 0x42, /// ///C key /// KEY_C = 0x43, /// ///D key /// KEY_D = 0x44, /// ///E key /// KEY_E = 0x45, /// ///F key /// KEY_F = 0x46, /// ///G key /// KEY_G = 0x47, /// ///H key /// KEY_H = 0x48, /// ///I key /// KEY_I = 0x49, /// ///J key /// KEY_J = 0x4A, /// ///K key /// KEY_K = 0x4B, /// ///L key /// KEY_L = 0x4C, /// ///M key /// KEY_M = 0x4D, /// ///N key /// KEY_N = 0x4E, /// ///O key /// KEY_O = 0x4F, /// ///P key /// KEY_P = 0x50, /// ///Q key /// KEY_Q = 0x51, /// ///R key /// KEY_R = 0x52, /// ///S key /// KEY_S = 0x53, /// ///T key /// KEY_T = 0x54, /// ///U key /// KEY_U = 0x55, /// ///V key /// KEY_V = 0x56, /// ///W key /// KEY_W = 0x57, /// ///X key /// KEY_X = 0x58, /// ///Y key /// KEY_Y = 0x59, /// ///Z key /// KEY_Z = 0x5A, /// ///Left Windows key (Microsoft Natural keyboard) /// LWIN = 0x5B, /// ///Right Windows key (Natural keyboard) /// RWIN = 0x5C, /// ///Applications key (Natural keyboard) /// APPS = 0x5D, /// ///Computer Sleep key /// SLEEP = 0x5F, /// ///Numeric keypad 0 key /// NUMPAD0 = 0x60, /// ///Numeric keypad 1 key /// NUMPAD1 = 0x61, /// ///Numeric keypad 2 key /// NUMPAD2 = 0x62, /// ///Numeric keypad 3 key /// NUMPAD3 = 0x63, /// ///Numeric keypad 4 key /// NUMPAD4 = 0x64, /// ///Numeric keypad 5 key /// NUMPAD5 = 0x65, /// ///Numeric keypad 6 key /// NUMPAD6 = 0x66, /// ///Numeric keypad 7 key /// NUMPAD7 = 0x67, /// ///Numeric keypad 8 key /// NUMPAD8 = 0x68, /// ///Numeric keypad 9 key /// NUMPAD9 = 0x69, /// ///Multiply key /// MULTIPLY = 0x6A, /// ///Add key /// ADD = 0x6B, /// ///Separator key /// SEPARATOR = 0x6C, /// ///Subtract key /// SUBTRACT = 0x6D, /// ///Decimal key /// DECIMAL = 0x6E, /// ///Divide key /// DIVIDE = 0x6F, /// ///F1 key /// F1 = 0x70, /// ///F2 key /// F2 = 0x71, /// ///F3 key /// F3 = 0x72, /// ///F4 key /// F4 = 0x73, /// ///F5 key /// F5 = 0x74, /// ///F6 key /// F6 = 0x75, /// ///F7 key /// F7 = 0x76, /// ///F8 key /// F8 = 0x77, /// ///F9 key /// F9 = 0x78, /// ///F10 key /// F10 = 0x79, /// ///F11 key /// F11 = 0x7A, /// ///F12 key /// F12 = 0x7B, /// ///F13 key /// F13 = 0x7C, /// ///F14 key /// F14 = 0x7D, /// ///F15 key /// F15 = 0x7E, /// ///F16 key /// F16 = 0x7F, /// ///F17 key /// F17 = 0x80, /// ///F18 key /// F18 = 0x81, /// ///F19 key /// F19 = 0x82, /// ///F20 key /// F20 = 0x83, /// ///F21 key /// F21 = 0x84, /// ///F22 key, (PPC only) Key used to lock device. /// F22 = 0x85, /// ///F23 key /// F23 = 0x86, /// ///F24 key /// F24 = 0x87, /// ///NUM LOCK key /// NUMLOCK = 0x90, /// ///SCROLL LOCK key /// SCROLL = 0x91, /// ///Left SHIFT key /// LSHIFT = 0xA0, /// ///Right SHIFT key /// RSHIFT = 0xA1, /// ///Left CONTROL key /// LCONTROL = 0xA2, /// ///Right CONTROL key /// RCONTROL = 0xA3, /// ///Left MENU key /// LMENU = 0xA4, /// ///Right MENU key /// RMENU = 0xA5, /// ///Windows 2000/XP: Browser Back key /// BROWSER_BACK = 0xA6, /// ///Windows 2000/XP: Browser Forward key /// BROWSER_FORWARD = 0xA7, /// ///Windows 2000/XP: Browser Refresh key /// BROWSER_REFRESH = 0xA8, /// ///Windows 2000/XP: Browser Stop key /// BROWSER_STOP = 0xA9, /// ///Windows 2000/XP: Browser Search key /// BROWSER_SEARCH = 0xAA, /// ///Windows 2000/XP: Browser Favorites key /// BROWSER_FAVORITES = 0xAB, /// ///Windows 2000/XP: Browser Start and Home key /// BROWSER_HOME = 0xAC, /// ///Windows 2000/XP: Volume Mute key /// VOLUME_MUTE = 0xAD, /// ///Windows 2000/XP: Volume Down key /// VOLUME_DOWN = 0xAE, /// ///Windows 2000/XP: Volume Up key /// VOLUME_UP = 0xAF, /// ///Windows 2000/XP: Next Track key /// MEDIA_NEXT_TRACK = 0xB0, /// ///Windows 2000/XP: Previous Track key /// MEDIA_PREV_TRACK = 0xB1, /// ///Windows 2000/XP: Stop Media key /// MEDIA_STOP = 0xB2, /// ///Windows 2000/XP: Play/Pause Media key /// MEDIA_PLAY_PAUSE = 0xB3, /// ///Windows 2000/XP: Start Mail key /// LAUNCH_MAIL = 0xB4, /// ///Windows 2000/XP: Select Media key /// LAUNCH_MEDIA_SELECT = 0xB5, /// ///Windows 2000/XP: Start Application 1 key /// LAUNCH_APP1 = 0xB6, /// ///Windows 2000/XP: Start Application 2 key /// LAUNCH_APP2 = 0xB7, /// ///Used for miscellaneous characters; it can vary by keyboard. /// OEM_1 = 0xBA, /// ///Windows 2000/XP: For any country/region, the '+' key /// OEM_PLUS = 0xBB, /// ///Windows 2000/XP: For any country/region, the ',' key /// OEM_COMMA = 0xBC, /// ///Windows 2000/XP: For any country/region, the '-' key /// OEM_MINUS = 0xBD, /// ///Windows 2000/XP: For any country/region, the '.' key /// OEM_PERIOD = 0xBE, /// ///Used for miscellaneous characters; it can vary by keyboard. /// OEM_2 = 0xBF, /// ///Used for miscellaneous characters; it can vary by keyboard. /// OEM_3 = 0xC0, /// ///Used for miscellaneous characters; it can vary by keyboard. /// OEM_4 = 0xDB, /// ///Used for miscellaneous characters; it can vary by keyboard. /// OEM_5 = 0xDC, /// ///Used for miscellaneous characters; it can vary by keyboard. /// OEM_6 = 0xDD, /// ///Used for miscellaneous characters; it can vary by keyboard. /// OEM_7 = 0xDE, /// ///Used for miscellaneous characters; it can vary by keyboard. /// OEM_8 = 0xDF, /// ///Windows 2000/XP: Either the angle bracket key or the backslash key on the RT 102-key keyboard /// OEM_102 = 0xE2, /// ///Windows 95/98/Me, Windows NT 4.0, Windows 2000/XP: IME PROCESS key /// PROCESSKEY = 0xE5, /// ///Windows 2000/XP: Used to pass Unicode characters as if they were keystrokes. ///The VK_PACKET key is the low word of a 32-bit Virtual Key value used for non-keyboard input methods. For more information, ///see Remark in KEYBDINPUT, SendInput, WM_KEYDOWN, and WM_KEYUP /// PACKET = 0xE7, /// ///Attn key /// ATTN = 0xF6, /// ///CrSel key /// CRSEL = 0xF7, /// ///ExSel key /// EXSEL = 0xF8, /// ///Erase EOF key /// EREOF = 0xF9, /// ///Play key /// PLAY = 0xFA, /// ///Zoom key /// ZOOM = 0xFB, /// ///Reserved /// NONAME = 0xFC, /// ///PA1 key /// PA1 = 0xFD, /// ///Clear key /// OEM_CLEAR = 0xFE } internal enum ScanCodeShort : short { LBUTTON = 0, RBUTTON = 0, CANCEL = 70, MBUTTON = 0, XBUTTON1 = 0, XBUTTON2 = 0, BACK = 14, TAB = 15, CLEAR = 76, RETURN = 28, SHIFT = 42, CONTROL = 29, MENU = 56, PAUSE = 0, CAPITAL = 58, KANA = 0, HANGUL = 0, JUNJA = 0, FINAL = 0, HANJA = 0, KANJI = 0, ESCAPE = 1, CONVERT = 0, NONCONVERT = 0, ACCEPT = 0, MODECHANGE = 0, SPACE = 57, PRIOR = 73, NEXT = 81, END = 79, HOME = 71, LEFT = 75, UP = 72, RIGHT = 77, DOWN = 80, SELECT = 0, PRINT = 0, EXECUTE = 0, SNAPSHOT = 84, INSERT = 82, DELETE = 83, HELP = 99, KEY_0 = 11, KEY_1 = 2, KEY_2 = 3, KEY_3 = 4, KEY_4 = 5, KEY_5 = 6, KEY_6 = 7, KEY_7 = 8, KEY_8 = 9, KEY_9 = 10, KEY_A = 30, KEY_B = 48, KEY_C = 46, KEY_D = 32, KEY_E = 18, KEY_F = 33, KEY_G = 34, KEY_H = 35, KEY_I = 23, KEY_J = 36, KEY_K = 37, KEY_L = 38, KEY_M = 50, KEY_N = 49, KEY_O = 24, KEY_P = 25, KEY_Q = 16, KEY_R = 19, KEY_S = 31, KEY_T = 20, KEY_U = 22, KEY_V = 47, KEY_W = 17, KEY_X = 45, KEY_Y = 21, KEY_Z = 44, LWIN = 91, RWIN = 92, APPS = 93, SLEEP = 95, NUMPAD0 = 82, NUMPAD1 = 79, NUMPAD2 = 80, NUMPAD3 = 81, NUMPAD4 = 75, NUMPAD5 = 76, NUMPAD6 = 77, NUMPAD7 = 71, NUMPAD8 = 72, NUMPAD9 = 73, MULTIPLY = 55, ADD = 78, SEPARATOR = 0, SUBTRACT = 74, DECIMAL = 83, DIVIDE = 53, F1 = 59, F2 = 60, F3 = 61, F4 = 62, F5 = 63, F6 = 64, F7 = 65, F8 = 66, F9 = 67, F10 = 68, F11 = 87, F12 = 88, F13 = 100, F14 = 101, F15 = 102, F16 = 103, F17 = 104, F18 = 105, F19 = 106, F20 = 107, F21 = 108, F22 = 109, F23 = 110, F24 = 118, NUMLOCK = 69, SCROLL = 70, LSHIFT = 42, RSHIFT = 54, LCONTROL = 29, RCONTROL = 29, LMENU = 56, RMENU = 56, BROWSER_BACK = 106, BROWSER_FORWARD = 105, BROWSER_REFRESH = 103, BROWSER_STOP = 104, BROWSER_SEARCH = 101, BROWSER_FAVORITES = 102, BROWSER_HOME = 50, VOLUME_MUTE = 32, VOLUME_DOWN = 46, VOLUME_UP = 48, MEDIA_NEXT_TRACK = 25, MEDIA_PREV_TRACK = 16, MEDIA_STOP = 36, MEDIA_PLAY_PAUSE = 34, LAUNCH_MAIL = 108, LAUNCH_MEDIA_SELECT = 109, LAUNCH_APP1 = 107, LAUNCH_APP2 = 33, OEM_1 = 39, OEM_PLUS = 13, OEM_COMMA = 51, OEM_MINUS = 12, OEM_PERIOD = 52, OEM_2 = 53, OEM_3 = 41, OEM_4 = 26, OEM_5 = 43, OEM_6 = 27, OEM_7 = 40, OEM_8 = 0, OEM_102 = 86, PROCESSKEY = 0, PACKET = 0, ATTN = 0, CRSEL = 0, EXSEL = 0, EREOF = 93, PLAY = 0, ZOOM = 98, NONAME = 0, PA1 = 0, OEM_CLEAR = 0, } ///  /// Define HARDWAREINPUT struct ///  [StructLayout(LayoutKind.Sequential)] internal struct HARDWAREINPUT { internal int uMsg; internal short wParamL; internal short wParamH; } 

我一直在寻找多媒体按钮按下的仿真,发现你需要使用这些参数(在@Gareth代码中):Input.U.ki.wVk = VirtualKeyShort.VOLUME_MUTE; Input.U.ki.dwFlags = KEYEVENTF.UNICODE;

keybd_event应该做的工作:

  // Simulate a key press keybd_event( VK_NUMLOCK, 0x45, KEYEVENTF_EXTENDEDKEY | 0, 0 ); // Simulate a key release keybd_event( VK_NUMLOCK, 0x45, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0); 

更多信息: http : //msdn.microsoft.com/en-us/library/windows/desktop/ms646304(v = vs。85).aspx

Windows输入模拟器使这非常容易。

Windows输入模拟器提供了一个简单的.NET(C#)接口,用于使用Win32 SendInput方法模拟键盘或鼠标输入。 所有的Interop都是为您完成的,并且有一个简单的编程模型用于发送多个击键。 Nuget包 – > Install-Package InputSimulator

https://inputsimulator.codeplex.com/