private static bool SendModifierVKey(int vKey, bool bDown) { Debug.Assert((Marshal.SizeOf(typeof(NativeMethods.INPUT32)) == 28) || (Marshal.SizeOf(typeof(NativeMethods.INPUT32)) == 32)); if (bDown || IsKeyModifierActive(vKey)) { NativeMethods.INPUT32[] pInput = new NativeMethods.INPUT32[1]; pInput[0].Type = NativeMethods.INPUT_KEYBOARD; pInput[0].KeyboardInput.VirtualKeyCode = (ushort)vKey; pInput[0].KeyboardInput.ScanCode = (ushort)(NativeMethods.MapVirtualKey((uint)vKey, 0) & 0xFF); pInput[0].KeyboardInput.Flags = ((bDown ? 0 : NativeMethods.KEYEVENTF_KEYUP) | (IsExtendedKeyEx(vKey) ? NativeMethods.KEYEVENTF_EXTENDEDKEY : 0)); pInput[0].KeyboardInput.Time = 0; pInput[0].KeyboardInput.ExtraInfo = NativeMethods.GetMessageExtraInfo(); if (NativeMethods.SendInput32(1, pInput, Marshal.SizeOf(typeof(NativeMethods.INPUT32))) != 1) { // Debug.Assert(false); return(false); } return(true); } return(false); }
private bool SendVKeyNative32(int vKey, bool?obExtKey, char?optUnicodeChar, bool bDown) { NativeMethods.INPUT32[] pInput = new NativeMethods.INPUT32[1]; pInput[0].Type = NativeMethods.INPUT_KEYBOARD; if (optUnicodeChar.HasValue && WinUtil.IsAtLeastWindows2000) { pInput[0].KeyboardInput.VirtualKeyCode = 0; pInput[0].KeyboardInput.ScanCode = (ushort)optUnicodeChar.Value; pInput[0].KeyboardInput.Flags = ((bDown ? 0 : NativeMethods.KEYEVENTF_KEYUP) | NativeMethods.KEYEVENTF_UNICODE); } else { IntPtr hKL = m_swiCurrent.KeyboardLayout; if (optUnicodeChar.HasValue) { vKey = (int)(NativeMethods.VkKeyScan3(optUnicodeChar.Value, hKL) & 0xFFU); } pInput[0].KeyboardInput.VirtualKeyCode = (ushort)vKey; pInput[0].KeyboardInput.ScanCode = (ushort)(NativeMethods.MapVirtualKey3((uint)vKey, NativeMethods.MAPVK_VK_TO_VSC, hKL) & 0xFFU); pInput[0].KeyboardInput.Flags = GetKeyEventFlags(vKey, obExtKey, bDown); } pInput[0].KeyboardInput.Time = 0; pInput[0].KeyboardInput.ExtraInfo = NativeMethods.GetMessageExtraInfo(); Debug.Assert(Marshal.SizeOf(typeof(NativeMethods.INPUT32)) == 28); if (NativeMethods.SendInput32(1, pInput, Marshal.SizeOf(typeof(NativeMethods.INPUT32))) != 1) { return(false); } return(true); }
private bool SendVKeyNative32(uint keyStroke, KeySet keyset) { var input = new NativeMethods.INPUT32(); input.Type = InputType.Keyboard; input.Keyboard.Flags = keyStroke | keyset.Flag; input.Keyboard.VirtualKey = keyset.VirtualKey; // input.Keyboard.ScanCode =(ushort)(NativeMethods.MapVirtualKey3((uint)keyset.VirtualKey, NativeMethods.MAPVK_VK_TO_VSC, _keyboardLayout) & 0xFFU); ; input.Keyboard.ScanCode = 0; input.Keyboard.Time = 0; input.Keyboard.ExtraInfo = NativeMethods.GetMessageExtraInfo(); NativeMethods.INPUT32[] inputs = { input }; if (NativeMethods.SendInput32(1, inputs, Marshal.SizeOf(typeof(NativeMethods.INPUT32))) != 1) { return(false); } return(true); }
private static bool SendVKeyNative32(int vKey, char?optUnicodeChar, bool bDown) { NativeMethods.INPUT32[] pInput = new NativeMethods.INPUT32[1]; pInput[0].Type = NativeMethods.INPUT_KEYBOARD; if (optUnicodeChar.HasValue && WinUtil.IsAtLeastWindows2000) { pInput[0].KeyboardInput.VirtualKeyCode = 0; pInput[0].KeyboardInput.ScanCode = (ushort)optUnicodeChar.Value; pInput[0].KeyboardInput.Flags = ((bDown ? 0 : NativeMethods.KEYEVENTF_KEYUP) | NativeMethods.KEYEVENTF_UNICODE); } else // Standard VKey { if (optUnicodeChar.HasValue) { vKey = (int)(NativeMethods.VkKeyScan(optUnicodeChar.Value) & 0xFF); } pInput[0].KeyboardInput.VirtualKeyCode = (ushort)vKey; pInput[0].KeyboardInput.ScanCode = (ushort)(NativeMethods.MapVirtualKey((uint)vKey, 0) & 0xFF); pInput[0].KeyboardInput.Flags = ((bDown ? 0 : NativeMethods.KEYEVENTF_KEYUP) | (IsExtendedKeyEx(vKey) ? NativeMethods.KEYEVENTF_EXTENDEDKEY : 0)); } pInput[0].KeyboardInput.Time = 0; pInput[0].KeyboardInput.ExtraInfo = NativeMethods.GetMessageExtraInfo(); Debug.Assert(Marshal.SizeOf(typeof(NativeMethods.INPUT32)) == 28); if (NativeMethods.SendInput32(1, pInput, Marshal.SizeOf(typeof(NativeMethods.INPUT32))) != 1) { return(false); } return(true); }
private void bufferKey32bit(byte virtualKeyCode, ushort scanCode, KeyEvent keyEvent) { NativeMethods.INPUT32 input = new NativeMethods.INPUT32(); input.type = NativeMethods.INPUT_KEYBOARD; input.ki.wVk = (byte)virtualKeyCode; input.ki.wScan = scanCode; if (keyEvent == KeyEvent.KeyUp) input.ki.dwFlags = NativeMethods.KEYEVENTF_KEYUP; _keyboardInputs32.Add(input); }