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;
                        if (IsDesktopActive)
                        {
                            needToHandleSingleClick = true;
                        }
                        Action action = delegate()
                        {
                            DoubleTripleQuadMouseClicksTracker.Start();
                        };
                        System.Windows.Application.Current.Dispatcher.Invoke(action);
                        break;

                    case 2:
                        MouseState = DesktopMouseState.DOUBLE_CLICK;
                        needToHanldeDoubleClick = true;
                        needToHandleSingleClick = false;
                        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)
                //{
                //    if (!needToHanldeDoubleClick)
                //    {
                //        MouseState = DesktopMouseState.LEFT_CLICK_UP;
                //    }
                //}
                else if (MouseMessage.WM_MOUSEMOVE == (MouseMessage)wParam)
                {
                    MouseState = DesktopMouseState.MOUSE_MOVE;
                }
                Action d = delegate()
                {
                    IntPtr foregroundWindow = WindowsUtilities.GetForegroundWindow();
                    if (foregroundWindow == WindowsUtilities.FindWindow("CrypticWindow", null))
                    {
                        if (MouseState == DesktopMouseState.MOUSE_MOVE)
                        {
                            FireMouseMoveEvent();
                        }
                        else if (MouseState == DesktopMouseState.RIGHT_CLICK)
                        {
                            FireMouseRightClick();
                        }
                        else if (MouseState == DesktopMouseState.LEFT_CLICK)
                        {
                            if (needToHandleSingleClick)
                            {
                                FireMouseLeftClick();
                            }
                        }
                        //else if (MouseState == DesktopMouseState.LEFT_CLICK_UP)
                        //{
                        //    FireMouseLeftClickUp();
                        //}
                        else if (MouseState == DesktopMouseState.RIGHT_CLICK_UP)
                        {
                            FireMouseRightClickUp();
                        }
                        else if (MouseState == DesktopMouseState.DOUBLE_CLICK)
                        {
                            if (needToHanldeDoubleClick)
                            {
                                FireMouseDoubleClick();
                            }
                        }
                    }
                };

                AsyncDelegateExecuter adex = new AsyncDelegateExecuter(d, 50);
                adex.ExecuteAsyncDelegate();
            }
            return(MouseHook.CallNextHookEx(mouseHookID, nCode, wParam, lParam));
        }
        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));
        }