KeyboardActivityArgs(KeyboardDevice keyboard, IntPtr windowHandle, KeyActivityType eventType, VirtualKeyCodes vKeyCode, KeyMasks masks, int scanCode, int repeatCount, bool extended, char aChar) { fKeyboard = keyboard; fWindowHandle = windowHandle; fEventType = eventType; m_VirtualKeyCode = vKeyCode; m_KeyMasks = masks; fKeyChar = aChar; fRepeatCount = repeatCount; m_OEMScanCode = scanCode; fIsExtended = extended; //int previousKeyState = ((int)fKeyFlags & 0x40000000) >> 30; //fKeyWasPreviouslyDown = (1 == previousKeyState); // Not used at the moment //int context = ((int)fKeyFlags & 0x20000000) >> 29; //int transitionState = (int)(((int)fKeyFlags & 0x100000000) >> 31); }
public static void SimulateKeyboardActivity(VirtualKeyCodes keyCode, KeyActivityType keyEvent) { KeyEvents++; INPUT structInput; structInput = new INPUT(); structInput.type = User32.INPUT_KEYBOARD; structInput.ki.wScan = 0; structInput.ki.time = 0; structInput.ki.wVk = (short)keyCode; switch (keyEvent) { case KeyActivityType.SysKeyDown: case KeyActivityType.KeyDown: structInput.ki.dwFlags = 0; // Keydown if ((VirtualKeyCodes.LShiftKey == keyCode) || (VirtualKeyCodes.RShiftKey == keyCode)) { //|| ((Keys)kd.keyCode).ToString().CompareTo("LMenu") == 0 structInput.ki.dwFlags |= User32.KEYEVENTF_EXTENDEDKEY; } break; case KeyActivityType.SysKeyUp: case KeyActivityType.KeyUp: structInput.ki.dwFlags = User32.KEYEVENTF_KEYUP; break; default: //structInput.ki.keyEvent = (int)User32.KEYEVENTF_KEYUP; break; } //InputHook.RealData = false; SimulateInput(structInput); // Something interesting about the sticky Shift Key:( if ((keyEvent == KeyActivityType.KeyUp) && ((VirtualKeyCodes.LShiftKey == keyCode) || (VirtualKeyCodes.RShiftKey == keyCode))) { User32.keybd_event((byte)User32.VK_SHIFT, 0, (uint)(User32.KEYEVENTF_EXTENDEDKEY | User32.KEYEVENTF_KEYUP), 0); //structInput.ki.keyCode = (short)VK.RSHIFT; // Does not work in XP => try keybd_event //SimulateInput(structInput); } //InputHook.RealData = true; InputProcessKeyEx(keyCode, keyEvent); }
public KeyboardActivityArgs(KeyActivityType eventType, VirtualKeyCodes vKeyCode) :this(null, IntPtr.Zero, eventType, vKeyCode, 0, 0, 0, false, '\0') { }
private static void InputProcessKeyEx(VirtualKeyCodes vkCode, KeyActivityType eventType) { if (eventType == KeyActivityType.KeyUp) { switch (vkCode) { case VirtualKeyCodes.LWin: case VirtualKeyCodes.RWin: WinDown = false; break; case VirtualKeyCodes.LControlKey: case VirtualKeyCodes.RControlKey: CtrlDown = false; break; case VirtualKeyCodes.LMenu: case VirtualKeyCodes.RMenu: AltDown = false; break; default: break; } } else { switch (vkCode) { case VirtualKeyCodes.LWin: case VirtualKeyCodes.RWin: WinDown = true; break; case VirtualKeyCodes.LControlKey: case VirtualKeyCodes.RControlKey: CtrlDown = true; break; case VirtualKeyCodes.LMenu: case VirtualKeyCodes.RMenu: AltDown = true; break; case VirtualKeyCodes.Delete: if (CtrlDown && AltDown) { ReleaseAllKeys(); } break; case VirtualKeyCodes.L: if (WinDown) { ReleaseAllKeys(); User32.LockWorkStation(); } break; default: break; } } }