public void ActivateMouseHook()
 {
     MouseHookID = MouseHook.SetHook(this.HandleMouseEvent);
 }
        internal IntPtr HandleMouseEvent(int nCode, IntPtr wParam, IntPtr lParam)
        {
            if (nCode >= 0)
            {
                if (MouseMessage.WM_LBUTTONDOWN == (MouseMessage)wParam)
                {
                    MouseClickCount++;
                    switch (MouseClickCount)
                    {
                    case 1:
                        MouseState = DesktopMouseState.LEFT_CLICK;
                        Action action = delegate()
                        {
                            mouseClicksTracker.Start();
                        };
                        System.Windows.Application.Current.Dispatcher.BeginInvoke(action);
                        break;

                    case 2:
                        MouseState = DesktopMouseState.DOUBLE_CLICK;
                        break;

                    case 3: MouseState = DesktopMouseState.TRIPLE_CLICK; break;

                    case 4: MouseState = DesktopMouseState.QUAD_CLICK; break;
                    }
                }
                else if (MouseMessage.WM_RBUTTONDOWN == (MouseMessage)wParam)
                {
                    MouseState = DesktopMouseState.RIGHT_CLICK;
                }
                else if (MouseMessage.WM_RBUTTONUP == (MouseMessage)wParam)
                {
                    MouseState = DesktopMouseState.RIGHT_CLICK_UP;
                }
                else if (MouseMessage.WM_LBUTTONUP == (MouseMessage)wParam)
                {
                    MouseState = DesktopMouseState.LEFT_CLICK_UP;
                }
                else if (MouseMessage.WM_MOUSEMOVE == (MouseMessage)wParam)
                {
                    MouseState = DesktopMouseState.MOUSE_MOVE;
                }
                IntPtr foregroundWindow = WindowsUtilities.GetForegroundWindow();
                if (foregroundWindow == WindowsUtilities.FindWindow("CrypticWindow", null))
                {
                    if (MouseState == DesktopMouseState.MOUSE_MOVE)
                    {
                        FireMouseMoveEvent();
                    }
                    else if (MouseState == DesktopMouseState.LEFT_CLICK)
                    {
                        FireMouseLeftClick();
                    }
                    else if (MouseState == DesktopMouseState.RIGHT_CLICK)
                    {
                        FireMouseRightClick();
                    }
                    else if (MouseState == DesktopMouseState.LEFT_CLICK_UP)
                    {
                        FireMouseLeftClickUp();
                    }
                    else if (MouseState == DesktopMouseState.RIGHT_CLICK_UP)
                    {
                        FireMouseRightClickUp();
                    }
                    else if (MouseState == DesktopMouseState.DOUBLE_CLICK)
                    {
                        FireMouseDoubleClick();
                    }
                    else if (MouseState == DesktopMouseState.TRIPLE_CLICK)
                    {
                        FireMouseTripleCLick();
                    }
                }
            }
            return(MouseHook.CallNextHookEx(MouseHookID, nCode, wParam, lParam));
        }