Esempio n. 1
0
        private IntPtr KeyHookProc(int nCode, IntPtr wParam, IntPtr lParam)
        {
            Hook.KBDLLHOOKSTRUCT   hs = (Hook.KBDLLHOOKSTRUCT)Marshal.PtrToStructure(lParam, typeof(Hook.KBDLLHOOKSTRUCT));
            Message.WindowsMessage wm = (Message.WindowsMessage)wParam;
            if (nCode >= 0 && (_key == 0 || _key == hs.vkCode))
            {
                Keyboard.VirtualKeyStates key      = (Keyboard.VirtualKeyStates)hs.vkCode;
                Keyboard.ScanCodes        scanCode = (Keyboard.ScanCodes)hs.scanCode;
                KeyboardState.KeyStatus   status;
                switch (wm)
                {
                case Message.WindowsMessage.KEYDOWN:
                case Message.WindowsMessage.SYSKEYDOWN:
                    status = KeyboardState.KeyStatus.Down;
                    break;

                case Message.WindowsMessage.KEYUP:
                case Message.WindowsMessage.SYSKEYUP:
                    status = KeyboardState.KeyStatus.Up;
                    break;

                default:
                    status = KeyboardState.KeyStatus.None;
                    break;
                }
                TimeSpan      time = TimeSpan.FromMilliseconds(hs.time);
                KeyboardState ks   = KeyboardState.CreateCurrent(key, scanCode, status, time);
                switch (ks.Status)
                {
                case KeyboardState.KeyStatus.Down:
                    KeyAny?.Invoke(this, ks);
                    KeyPress?.Invoke(this, ks);
                    KeyDown?.Invoke(this, ks);
                    break;

                case KeyboardState.KeyStatus.Hold:
                    KeyAny?.Invoke(this, ks);
                    KeyPress?.Invoke(this, ks);
                    KeyHold?.Invoke(this, ks);
                    break;

                case KeyboardState.KeyStatus.Up:
                    KeyAny?.Invoke(this, ks);
                    KeyUp?.Invoke(this, ks);
                    break;

                default:
                    KeyAny?.Invoke(this, ks);
                    break;
                }
                if (CallNextHook is null || CallNextHook(this, ks))
                {
                    return(Hook.CallNextHookEx(_kHHook, nCode, wParam, lParam));
                }
                else
                {
                    return(_kHHook);
                }
            }
 public KeyboardState(
     Keyboard.VirtualKeyStates key = Keyboard.VirtualKeyStates.None,
     Keyboard.ScanCodes scanCode   = Keyboard.ScanCodes.None,
     KeyStatus status       = KeyStatus.None,
     KeyModifiers modifiers = KeyModifiers.None,
     TimeSpan time          = new TimeSpan())
 {
     _Key       = key;
     _ScanCode  = scanCode;
     _Status    = status;
     _Modifiers = modifiers;
     _Time      = time;
 }
Esempio n. 3
0
 public static IntPtr GetLParam(Keyboard.ScanCodes scanCode)
 {
     return((IntPtr)(((int)scanCode << 16) | 1));
 }
 public virtual void Up(Keyboard.VirtualKeyStates virtualKey, Keyboard.ScanCodes scanCode)
 {
     scanCode = GetClearScanCode(scanCode) | Keyboard.ScanCodes.Pressed | Keyboard.ScanCodes.Transition;
     Message.PostMessage(WindowHandle, Message.WindowsMessage.KEYUP, (IntPtr)virtualKey, GetLParam(scanCode));
 }
 public static Keyboard.ScanCodes GetClearScanCode(Keyboard.ScanCodes scanCode)
 {
     return(scanCode & (Keyboard.ScanCodes.ScanCode | Keyboard.ScanCodes.Extended | Keyboard.ScanCodes.Context));
 }
 public virtual void Hold(Keyboard.VirtualKeyStates virtualKey, Keyboard.ScanCodes scanCode)
 {
     scanCode = GetClearScanCode(scanCode) | Keyboard.ScanCodes.Pressed;
     Message.PostMessage(WindowHandle, Message.WindowsMessage.KEYDOWN, (IntPtr)virtualKey, GetLParam(scanCode));
 }
Esempio n. 7
0
 public override void Down(Keyboard.VirtualKeyStates virtualKey, Keyboard.ScanCodes scanCode)
 {
     scanCode = GetClearScanCode(scanCode);
     Message.PostMessage(WindowHandle, Message.WindowsMessage.SYSKEYDOWN, (IntPtr)virtualKey, GetLParam(scanCode));
 }