protected override IntPtr HookTrigger(int nCode, IntPtr wParam, IntPtr lParam)
        {
            KeyboardMessages    keyboardMessage     = (KeyboardMessages)wParam.ToInt32();
            KeyboardMessageData keyboardMessageData = (KeyboardMessageData)Marshal.PtrToStructure(lParam, typeof(KeyboardMessageData));
            var keyboardEventArgs = new KeyboardEventArgs(keyboardMessage, keyboardMessageData.VkCode);

            switch (keyboardMessage)
            {
            case KeyboardMessages.WM_KEYDOWN:
                this.KeyDown?.Invoke(this, keyboardEventArgs);
                break;

            case KeyboardMessages.WM_KEYUP:
                this.KeyUp?.Invoke(this, keyboardEventArgs);
                break;

            case KeyboardMessages.WM_SYSKEYDOWN:
                this.SystemKeyDown?.Invoke(this, keyboardEventArgs);
                break;

            case KeyboardMessages.WM_SYSKEYUP:
                this.SystemKeyUp?.Invoke(this, keyboardEventArgs);
                break;
            }

            this.Action?.Invoke(this, keyboardEventArgs);

            return(HookNativeMethods.CallNextHookEx((int)HookId.WH_KEYBOARD_LL, nCode, wParam, lParam));
        }
        private IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam)
        {
            if (nCode >= 0)
            {
                KeyboardMessages keyType    = (KeyboardMessages)Marshal.ReadInt32(wParam);
                KBDLLHOOKSTRUCT  hookStruct = (KBDLLHOOKSTRUCT)Marshal.PtrToStructure(lParam, typeof(KBDLLHOOKSTRUCT));

                this.Event(
                    this,
                    new KeyboardEventArgs(
                        hookStruct.vkCode,
                        hookStruct.scanCode,
                        hookStruct.flags,
                        hookStruct.time,
                        keyType.GetName()));
            }

            return(Interop.CallNextHookEx(this.hookPointer, nCode, wParam, lParam));
        }
Exemplo n.º 3
0
        static void SendCommand(KeyboardCommands command)
        {
            KeyboardMessages message = KeyboardMessages.Acknowledge;

            do
            {
                IO.WriteByte(IO.Port.KB_data_port, (byte)command);

                // Wait for acknowledge and receieve it

                WaitUntilReady();

                message = (KeyboardMessages)IO.ReadByte(IO.Port.KB_data_port);

                if (message == KeyboardMessages.Request_Resend)
                {
                    continue;
                }
                else if (message == KeyboardMessages.Acknowledge)
                {
                    return;
                }
                else if (message == KeyboardMessages.Unknown1)                 // This was the cause of the caps issue.
                {
                    return;
                }
                else if (message == KeyboardMessages.Unknown2) // This was the cause of the caps issue in qemu.
                {
                    capsLock         = capsLock ^ capsLockReleased;
                    capsLockReleased = true;
                    return;
                }
                else
                {
                    TextMode.WriteByte((byte)message);
                    //Diagnostics.Error ("ADC.X86.Keyboard.SendCommand(): unhandled message");
                    return;
                }
            } while (message != KeyboardMessages.Acknowledge);
        }
Exemplo n.º 4
0
 public static extern int CallNextHookEx(IntPtr hhk, int nCode, KeyboardMessages wParam, [In] KBDLLHOOKSTRUCT lParam);
Exemplo n.º 5
0
 public KeyboardEventArgs(KeyboardMessages keyboardMessage, VirtualKeyCodes virtualKeyCode)
 {
     this.KeyboardMessage = keyboardMessage;
     this.VirtualKeyCode  = virtualKeyCode;
 }