Пример #1
0
        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);

        }
Пример #2
0
        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);

        }
Пример #3
0
 public KeyboardActivityArgs(KeyActivityType eventType, VirtualKeyCodes vKeyCode)
     :this(null, IntPtr.Zero, eventType, vKeyCode, 0, 0, 0, false, '\0')
 {
 }
Пример #4
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;
                }
            }
        }