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 void SetCursor(Message.NCHITTEST.ReturnValues nonClientHitTestResult, Message.WindowsMessage trigger) { Message.SendMessage(WindowHandle, Message.WindowsMessage.SETCURSOR, WindowHandle, (IntPtr)(((int)trigger << 16) | (int)nonClientHitTestResult)); }
private IntPtr MouseHookProc(int nCode, IntPtr wParam, IntPtr lParam) { Hook.MSLLHOOKSTRUCT hs = (Hook.MSLLHOOKSTRUCT)Marshal.PtrToStructure(lParam, typeof(Hook.MSLLHOOKSTRUCT)); Message.WindowsMessage wm = (Message.WindowsMessage)wParam; if (nCode >= 0) { Keyboard.VirtualKeyStates key; switch (wm) { case Message.WindowsMessage.LBUTTONDOWN: case Message.WindowsMessage.NCLBUTTONDOWN: case Message.WindowsMessage.LBUTTONUP: case Message.WindowsMessage.NCLBUTTONUP: key = Keyboard.VirtualKeyStates.LButton; break; case Message.WindowsMessage.RBUTTONDOWN: case Message.WindowsMessage.NCRBUTTONDOWN: case Message.WindowsMessage.RBUTTONUP: case Message.WindowsMessage.NCRBUTTONUP: key = Keyboard.VirtualKeyStates.RButton; break; case Message.WindowsMessage.MBUTTONDOWN: case Message.WindowsMessage.NCMBUTTONDOWN: case Message.WindowsMessage.MBUTTONUP: case Message.WindowsMessage.NCMBUTTONUP: key = Keyboard.VirtualKeyStates.MButton; break; case Message.WindowsMessage.XBUTTONDOWN: case Message.WindowsMessage.NCXBUTTONDOWN: case Message.WindowsMessage.XBUTTONUP: case Message.WindowsMessage.NCXBUTTONUP: key = (hs.mouseData & 0x10000) != 0 ? Keyboard.VirtualKeyStates.XButton1 : Keyboard.VirtualKeyStates.XButton2; break; default: key = Keyboard.VirtualKeyStates.None; break; } MouseState.MouseStatus status; switch (wm) { case Message.WindowsMessage.LBUTTONDOWN: case Message.WindowsMessage.NCLBUTTONDOWN: case Message.WindowsMessage.RBUTTONDOWN: case Message.WindowsMessage.NCRBUTTONDOWN: case Message.WindowsMessage.MBUTTONDOWN: case Message.WindowsMessage.NCMBUTTONDOWN: case Message.WindowsMessage.XBUTTONDOWN: case Message.WindowsMessage.NCXBUTTONDOWN: status = MouseState.MouseStatus.Down; break; case Message.WindowsMessage.LBUTTONUP: case Message.WindowsMessage.NCLBUTTONUP: case Message.WindowsMessage.RBUTTONUP: case Message.WindowsMessage.NCRBUTTONUP: case Message.WindowsMessage.MBUTTONUP: case Message.WindowsMessage.NCMBUTTONUP: case Message.WindowsMessage.XBUTTONUP: case Message.WindowsMessage.NCXBUTTONUP: status = MouseState.MouseStatus.Up; break; case Message.WindowsMessage.MOUSEWHEEL: case Message.WindowsMessage.MOUSEHWHEEL: status = MouseState.MouseStatus.Wheel; break; case Message.WindowsMessage.MOUSEMOVE: case Message.WindowsMessage.NCMOUSEMOVE: status = MouseState.MouseStatus.Move; break; default: status = MouseState.MouseStatus.None; break; } int wheel; int hWheel; switch (wm) { case Message.WindowsMessage.MOUSEWHEEL: wheel = (short)(hs.mouseData >> 16); hWheel = 0; break; case Message.WindowsMessage.MOUSEHWHEEL: wheel = 0; hWheel = (short)(hs.mouseData >> 16); break; default: wheel = 0; hWheel = 0; break; } MouseState ms = MouseState.CreateCurrent(key, status, hs.x, hs.y, wheel, hWheel, TimeSpan.FromMilliseconds(hs.time)); switch (ms.Status) { case MouseState.MouseStatus.Down: MouseAny?.Invoke(this, ms); MouseDown?.Invoke(this, ms); break; case MouseState.MouseStatus.Up: MouseAny?.Invoke(this, ms); MouseUp?.Invoke(this, ms); break; case MouseState.MouseStatus.Wheel: MouseAny?.Invoke(this, ms); MouseWheel?.Invoke(this, ms); break; case MouseState.MouseStatus.Move: MouseAny?.Invoke(this, ms); MouseMove?.Invoke(this, ms); break; default: MouseAny?.Invoke(this, ms); break; } if (CallNextHook is null || CallNextHook(this, ms)) { return(Hook.CallNextHookEx(_mHHook, nCode, wParam, lParam)); } else { return(_mHHook); } }