/// <summary> /// Generates a key press event /// </summary> /// <param name="vkCode">Virtual code of key</param> /// <param name="alt">ALT is pressed</param> /// <param name="ctrl">CTRL is pressed</param> /// <param name="shift">SHIFT is pressed</param> public void KeyPress(Keys vkCode, bool alt, bool ctrl, bool shift) { USER32.INPUT[] inputs = new USER32.INPUT[2]; USER32.INPUT si = new USER32.INPUT(); si.type = USER32.INPUTFlags.INPUT_KEYBOARD; si.ki = new USER32.KEYBDINPUT(); si.ki.wVk = (ushort)vkCode; si.ki.wScan = (ushort)USER32.MapVirtualKey((ushort)vkCode, USER32.MapType.MAPVK_VK_TO_VSC); si.ki.time = 0; si.ki.dwFlags = 0; //si.ki.dwExtraInfo = USER32.GetMessageExtraInfo(); inputs[0] = si; si = new USER32.INPUT(); si.type = USER32.INPUTFlags.INPUT_KEYBOARD; si.ki = new USER32.KEYBDINPUT(); si.ki.wVk = (ushort)vkCode; si.ki.wScan = (ushort)USER32.MapVirtualKey((ushort)vkCode, USER32.MapType.MAPVK_VK_TO_VSC); si.ki.time = 0; si.ki.dwFlags = (uint)USER32.INPUTFlags.KEYEVENTF_KEYUP; //si.ki.dwExtraInfo = USER32.GetMessageExtraInfo(); inputs[1] = si; USER32.SendInput(2, inputs, Marshal.SizeOf(si)); // ALTERNATE: //this.KeyDown(vkCode); //this.KeyUp(vkCode); }
/// <summary> /// Generates a key up event /// </summary> /// <param name="vkCode">Virtual code of key</param> public void KeyUp(Keys vkCode) { USER32.INPUT[] inputs = new USER32.INPUT[1]; USER32.INPUT si = new USER32.INPUT(); si.type = USER32.INPUTFlags.INPUT_KEYBOARD; si.ki = new USER32.KEYBDINPUT(); si.ki.wVk = (ushort)vkCode; si.ki.wScan = (ushort)(USER32.MapVirtualKey((ushort)vkCode, USER32.MapType.MAPVK_VK_TO_VSC) | (ushort)(this.IsExtendedKey(vkCode) ? 0x100 : 0)); // Set Extended Bit si.ki.time = 0; si.ki.dwFlags = (uint)USER32.INPUTFlags.KEYEVENTF_KEYUP | (this.IsExtendedKey(vkCode) ? (uint)USER32.INPUTFlags.KEYEVENTF_EXTENDEDKEY : 0); si.ki.dwExtraInfo = USER32.GetMessageExtraInfo(); inputs[0] = si; USER32.SendInput(1, inputs, Marshal.SizeOf(si)); }