private void mouseHook_HookFired(object sender, HookFiredEventArgs e) { MSLLHOOKSTRUCT hookStruct = (MSLLHOOKSTRUCT)Marshal.PtrToStructure(e.LParam, typeof(MSLLHOOKSTRUCT)); // TODO: double click, mouse wheel CancelMouseEventArgs args = null; switch ((MouseMessages)e.WParam) { case MouseMessages.WM_LBUTTONDOWN: if (LeftMouseDown != null) { LeftMouseDown(this, args = new CancelMouseEventArgs(MouseButtons.Left, 1, hookStruct.pt.x, hookStruct.pt.y, 0)); } break; case MouseMessages.WM_LBUTTONUP: if (LeftMouseUp != null) { LeftMouseUp(this, args = new CancelMouseEventArgs(MouseButtons.Left, 1, hookStruct.pt.x, hookStruct.pt.y, 0)); } break; case MouseMessages.WM_RBUTTONDOWN: if (RightMouseDown != null) { RightMouseDown(this, args = new CancelMouseEventArgs(MouseButtons.Right, 0, hookStruct.pt.x, hookStruct.pt.y, 0)); } break; case MouseMessages.WM_RBUTTONUP: if (RightMouseUp != null) { RightMouseUp(this, args = new CancelMouseEventArgs(MouseButtons.Right, 0, hookStruct.pt.x, hookStruct.pt.y, 0)); } break; case MouseMessages.WM_MOUSEMOVE: if (MouseMove != null) { MouseMove(this, args = new CancelMouseEventArgs(MouseButtons.None, 0, hookStruct.pt.x, hookStruct.pt.y, 0)); } break; } if (args != null && args.Cancel) { e.Cancel = true; } }
private void keyboardHook_HookFired(object sender, HookFiredEventArgs e) { if (e.NCode >= 0 && e.WParam == (IntPtr)WM_KEYDOWN) { int vkCode = Marshal.ReadInt32(e.LParam); if (KeyDown != null) { var keys = AddModifiers((Keys)vkCode); var args = new CancelKeyEventArgs(keys); KeyDown(this, args); if (args.Cancel) { e.Cancel = true; } } if (KeyPress != null) { bool isDownShift = ((GetKeyState(VK_SHIFT) & 0x80) == 0x80 ? true : false); bool isDownCapslock = (GetKeyState(VK_CAPITAL) != 0 ? true : false); KeyboardHookStruct khs = (KeyboardHookStruct)Marshal.PtrToStructure(e.LParam, typeof(KeyboardHookStruct)); byte[] keyState = new byte[256]; GetKeyboardState(keyState); byte[] inBuffer = new byte[2]; if (ToAscii(khs.VirtualKeyCode, khs.ScanCode, keyState, inBuffer, khs.Flags) == 1) { char key = (char)inBuffer[0]; if ((isDownCapslock ^ isDownShift) && Char.IsLetter(key)) { key = Char.ToUpper(key); } CancelKeyPressEventArgs args = new CancelKeyPressEventArgs(key); KeyPress(this, args); if (args.Cancel) { e.Cancel = true; } } } } }
private IntPtr HookCallback( int nCode, IntPtr wParam, IntPtr lParam) { if (nCode >= 0) { var args = new HookFiredEventArgs() { NCode = nCode, LParam = lParam, WParam = wParam }; if (HookFired != null) { HookFired(this, args); } if (args.Cancel) { return(new IntPtr(1)); } } return(CallNextHookEx(_hookID, nCode, wParam, lParam)); }