예제 #1
0
        /// <summary>
        /// This method will call the OnButtonUp event exposed from the library and pass on information about the button that was let go and the location of the mouse pointer.
        /// </summary>
        /// <param name="e">Argument passed by the MouseEvent under the Internal GlobalMouseHook.</param>
        /// <returns>Returns true if the event was handled and false if not.</returns>
        bool ButtonUp(GlobalMouseHookEventArgs e)
        {
            GHMouseButtons mouseButton = MouseMessageToGHMouseButton(e.MouseMessages, e.MouseData.mouseData);

            currentMouseButtonsPressed.Add(mouseButton); //Add mouse button to the list of currently being pressed mouse buttons.

            MousePosition mousePosition = new MousePosition(e.MouseData.pt.x, e.MouseData.pt.y);

            GlobalMouseEventArgs globalMouseEventArgs = new GlobalMouseEventArgs(mouseButton, mousePosition);

            return(CallEvent(OnButtonUp, globalMouseEventArgs));
        }
예제 #2
0
        bool MouseWheelEvent(GlobalMouseHookEventArgs e)
        {
            MousePosition mousePosition = new MousePosition(e.MouseData.pt.x, e.MouseData.pt.y);

            /* Compared to the other events, we need to find the rotation of the scroll wheel (wheel delta). Unfortunately, the low level mouse event doesn't pass it as a human readable value.
             * Instead, it is passed on as a high order word of the e.mouseData.mouseData value. We have to retrieve that High Order Word by using a helper function called GetSignedHWord.*/
            WheelRotation wheelRotation = (WheelRotation)(Helper.GetSignedHWORD(e.MouseData.mouseData)); //The Wheel Delta will always be either 120 for forwards movement and -120 for backwards movement which is already declared on the WheelRotation enum. All we have to do is cast the Wheel Delta to WheelRotation.


            GlobalMouseEventArgs globalMouseEventArgs = new GlobalMouseEventArgs(GHMouseButtons.None, mousePosition, wheelRotation);

            return(CallEvent(OnMouseWheelScroll, globalMouseEventArgs));
        }
예제 #3
0
        /// <summary>
        /// This method will call the OnButtonDown event exposed from the library and pass on information about the button that was pressed and the location of the mouse pointer.
        /// </summary>
        /// <param name="e">Argument passed by the MouseEvent under the Internal GlobalMouseHook.</param>
        /// <returns>Returns true if the event was handled and false if not.</returns>
        bool ButtonDown(GlobalMouseHookEventArgs e)
        {
            GHMouseButtons mouseButton = MouseMessageToGHMouseButton(e.MouseMessages, e.MouseData.mouseData); //We convert the ugly looking MouseMessages to an enumartion of the GHMouseButtons.

            currentMouseButtonsPressed.Remove(mouseButton);                                                   //Remove the mouse button from the list of buttons currently being pressed.

            MousePosition mousePosition = new MousePosition(e.MouseData.pt.x, e.MouseData.pt.y);              //Store the x and y coordinates of the mouse pointer on the screen.

            GlobalMouseEventArgs globalMouseEventArgs = new GlobalMouseEventArgs(mouseButton, mousePosition); //Now, we store the values of the mouseButton and the mousePosition into one class which will be the argument for the OnButtonDown event.

            return(CallEvent(OnButtonDown, globalMouseEventArgs));                                            //Let's now call the CallEvent method which handles the necessary "set up" needed before calling the OnButtonDown event for us. We also pass on the globalMouseEventArgs as the argument of the event.
            //It also returns a boolean value which tells us if the event was handled. We have to pass that value back to the _globalMouseHook_MouseEvent method.
        }
예제 #4
0
        private IntPtr LowLevelMouseEvent(int nCode, IntPtr wParam, IntPtr lParam)
        {
            bool fEatMouseEvent = false;

            var wparamTyped = wParam.ToInt32();

            if (Enum.IsDefined(typeof(MouseMessages), wparamTyped))
            {
                object         o = Marshal.PtrToStructure(lParam, typeof(MSLLHOOKSTRUCT));
                MSLLHOOKSTRUCT p = (MSLLHOOKSTRUCT)o;

                var eventArguments = new GlobalMouseHookEventArgs((MouseMessages)wparamTyped, p);

                EventHandler <GlobalMouseHookEventArgs> handler = MouseEvent;
                handler?.Invoke(this, eventArguments);

                fEatMouseEvent = eventArguments.Handled;
            }

            return(fEatMouseEvent ? (IntPtr)(-1) : DLLImports.CallNextHookEx(IntPtr.Zero, nCode, wParam, lParam));
        }
예제 #5
0
 //This method will be called when a Mouse Event happens.
 private void _globalMouseHook_MouseEvent(object sender, GlobalMouseHookEventArgs e)
 {
     if (e.MouseMessages == InternalGlobalMouseHook.MouseMessages.WM_LBUTTONDOWN || e.MouseMessages == InternalGlobalMouseHook.MouseMessages.WM_MBUTTONDOWN ||
         e.MouseMessages == InternalGlobalMouseHook.MouseMessages.WM_RBUTTONDOWN || e.MouseMessages == InternalGlobalMouseHook.MouseMessages.WM_XBUTTONDOWN)
     {
         e.Handled = ButtonDown(e); //If the left, middle, right or the X buttons were pressed, we call the ButtonDown method which handles the calling of the OnButtonDown event.
         // The ButtonDown method also returns a bool value. If it is set to true, succeeding events handling a ButtonDown will not be called.
     }
     else if (e.MouseMessages == InternalGlobalMouseHook.MouseMessages.WM_LBUTTONUP || e.MouseMessages == InternalGlobalMouseHook.MouseMessages.WM_MBUTTONUP ||
              e.MouseMessages == InternalGlobalMouseHook.MouseMessages.WM_RBUTTONUP || e.MouseMessages == InternalGlobalMouseHook.MouseMessages.WM_XBUTTONUP)
     {
         e.Handled = ButtonUp(e); //If the left, middle, right or the X buttons were released, we call the ButtonUp method which handles the calling of the OnButtonUp event.
     }
     else if (e.MouseMessages == InternalGlobalMouseHook.MouseMessages.WM_MOUSEMOVE)
     {
         e.Handled = MouseMove(e.MouseData.pt); //If the mouse pointers on the screen, we call the MouseMove method which handles the calling of the OnMouseMove event.
     }
     else if (e.MouseMessages == InternalGlobalMouseHook.MouseMessages.WM_MOUSEWHEEL)
     {
         e.Handled = MouseWheelEvent(e); //If the mouse wheel was rotated, we call the MouseWheelEvent method which handles the OnMouseWheelScroll event.
     }
 }