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)); }
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); }
public static extern int CallNextHookEx(IntPtr hhk, int nCode, KeyboardMessages wParam, [In] KBDLLHOOKSTRUCT lParam);
public KeyboardEventArgs(KeyboardMessages keyboardMessage, VirtualKeyCodes virtualKeyCode) { this.KeyboardMessage = keyboardMessage; this.VirtualKeyCode = virtualKeyCode; }