app如何从底层监听Win8系统的鼠标消息和键盘消息

来源:互联网 发布:vbox ubuntu 桥接模式 编辑:程序博客网 时间:2024/06/04 20:34
                // Keyboard and mouse navigation only apply when occupying the entire window                if (this.ActualHeight == Window.Current.Bounds.Height &&                    this.ActualWidth == Window.Current.Bounds.Width)                {                    // Listen to the window directly so focus isn't required                    Window.Current.CoreWindow.Dispatcher.AcceleratorKeyActivated +=                        CoreDispatcher_AcceleratorKeyActivated;                    Window.Current.CoreWindow.PointerPressed +=                        this.CoreWindow_PointerPressed;                }


        /// <summary>        /// Invoked on every keystroke, including system keys such as Alt key combinations, when        /// this page is active and occupies the entire window.  Used to detect keyboard navigation        /// between pages even when the page itself doesn't have focus.        /// </summary>        /// <param name="sender">Instance that triggered the event.</param>        /// <param name="args">Event data describing the conditions that led to the event.</param>        private void CoreDispatcher_AcceleratorKeyActivated(CoreDispatcher sender,            AcceleratorKeyEventArgs args)        {            var virtualKey = args.VirtualKey;            // Only investigate further when Left, Right, or the dedicated Previous or Next keys            // are pressed            if ((args.EventType == CoreAcceleratorKeyEventType.SystemKeyDown ||                args.EventType == CoreAcceleratorKeyEventType.KeyDown) &&                (virtualKey == VirtualKey.Left || virtualKey == VirtualKey.Right ||                (int)virtualKey == 166 || (int)virtualKey == 167))            {                var coreWindow = Window.Current.CoreWindow;                var downState = CoreVirtualKeyStates.Down;                bool menuKey = (coreWindow.GetKeyState(VirtualKey.Menu) & downState) == downState;                bool controlKey = (coreWindow.GetKeyState(VirtualKey.Control) & downState) == downState;                bool shiftKey = (coreWindow.GetKeyState(VirtualKey.Shift) & downState) == downState;                bool noModifiers = !menuKey && !controlKey && !shiftKey;                bool onlyAlt = menuKey && !controlKey && !shiftKey;                if (((int)virtualKey == 166 && noModifiers) ||                    (virtualKey == VirtualKey.Left && onlyAlt))                {                    // When the previous key or Alt+Left are pressed navigate back                    args.Handled = true;                    this.GoBack(this, new RoutedEventArgs());                }                else if (((int)virtualKey == 167 && noModifiers) ||                    (virtualKey == VirtualKey.Right && onlyAlt))                {                    // When the next key or Alt+Right are pressed navigate forward                    args.Handled = true;                    this.GoForward(this, new RoutedEventArgs());                }            }        }        /// <summary>        /// Invoked on every mouse click, touch screen tap, or equivalent interaction when this        /// page is active and occupies the entire window.  Used to detect browser-style next and        /// previous mouse button clicks to navigate between pages.        /// </summary>        /// <param name="sender">Instance that triggered the event.</param>        /// <param name="args">Event data describing the conditions that led to the event.</param>        private void CoreWindow_PointerPressed(CoreWindow sender,            PointerEventArgs args)        {            var properties = args.CurrentPoint.Properties;            // Ignore button chords with the left, right, and middle buttons            if (properties.IsLeftButtonPressed || properties.IsRightButtonPressed ||                properties.IsMiddleButtonPressed) return;            // If back or foward are pressed (but not both) navigate appropriately            bool backPressed = properties.IsXButton1Pressed;            bool forwardPressed = properties.IsXButton2Pressed;            if (backPressed ^ forwardPressed)            {                args.Handled = true;                if (backPressed) this.GoBack(this, new RoutedEventArgs());                if (forwardPressed) this.GoForward(this, new RoutedEventArgs());            }        }