private static NativeMethods.KEY_EVENT_RECORD GetKeyPressForSimpleKey(NativeMethods.KEY_EVENT_RECORD keypress, uint uCode) { keypress.UnicodeChar = (char)uCode; keypress.wVirtualKeyCode = (ushort)uCode; keypress.wVirtualScanCode = (ushort)NativeMethods.MapVirtualKey(uCode, MAPVK_VK_TO_VSC); return(keypress); }
internal static List <NativeMethods.INPUT_RECORD> MapInput(string inputElement) { List <NativeMethods.INPUT_RECORD> inputs = new List <NativeMethods.INPUT_RECORD>(); NativeMethods.INPUT_RECORD input = new NativeMethods.INPUT_RECORD(); input.EventType = 0x0001; NativeMethods.KEY_EVENT_RECORD keypress = new NativeMethods.KEY_EVENT_RECORD(); keypress.dwControlKeyState = 0; keypress.wRepeatCount = 1; // Just a regular character if (inputElement.Length == 1) { keypress.UnicodeChar = inputElement[0]; } else { switch (inputElement.ToUpperInvariant()) { case "BACKSPACE": case "BS": case "BKSP": keypress = GetKeyPressForSimpleKey(keypress, 0x08); break; case "BREAK": keypress = GetKeyPressForSimpleKey(keypress, 0x03); keypress.dwControlKeyState = (uint)NativeMethods.ControlKeyStates.LEFT_CTRL_PRESSED; keypress.UnicodeChar = (char)0; break; case "ENTER": keypress = GetKeyPressForSimpleKey(keypress, 0x0D); break; case "ESC": keypress = GetKeyPressForSimpleKey(keypress, 0x1B); break; } } keypress.bKeyDown = true; input.KeyEvent = keypress; inputs.Add(input); keypress.bKeyDown = false; keypress.dwControlKeyState = 0; input.KeyEvent = keypress; inputs.Add(input); return(inputs); }