Пример #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 void SetCursor(Message.NCHITTEST.ReturnValues nonClientHitTestResult, Message.WindowsMessage trigger)
 {
     Message.SendMessage(WindowHandle, Message.WindowsMessage.SETCURSOR, WindowHandle, (IntPtr)(((int)trigger << 16) | (int)nonClientHitTestResult));
 }
Пример #3
0
        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);
                }
            }