private int CallNextHook(int code, MouseMessage message, ref MouseState state)
        {
            if (code >= 0)
            {
                var button = MouseButtons.None;
                switch (message)
                {
                case MouseMessage.LDown:
                    //case MouseMessage.LUp:
                    button = MouseButtons.Left;
                    break;

                case MouseMessage.RDown:
                    //case MouseMessage.RUp:
                    button = MouseButtons.Right;
                    break;

                case MouseMessage.MDown:
                    //case MouseMessage.MUp:
                    button = MouseButtons.Middle;
                    break;

                case MouseMessage.XDown:
                    //case MouseMessage.XUp:
                    if (state.XButtonData.IsXButton1)
                    {
                        button = MouseButtons.XButton1;
                    }
                    if (state.XButtonData.IsXButton2)
                    {
                        button = MouseButtons.XButton2;
                    }
                    break;

                default:
                    button = MouseButtons.None;
                    break;
                }

                if ((_captureMouseButtons.Length == 0 || _captureMouseButtons.Contains(_button)) &&
                    button != MouseButtons.None)
                {
                    var e = new GlobalMouseHookedEventArgs(
                        message,
                        button,
                        IsDoubleClick(button, state),
                        IsDesktop(state),
                        ref state);
                    OnMouseHooked(e);
                    if (e.Cancel)
                    {
                        return(-1);
                    }
                }
            }
            return(CallNextHookEx(_hook, code, message, ref state));
        }
        /// <summary>
        ///     MouseHookedイベントを発生させる。
        /// </summary>
        /// <param name="e">イベントのデータ。</param>
        protected virtual void OnMouseHooked(GlobalMouseHookedEventArgs e)
        {
            var handler = Events[EventMouseHooked] as GlobalMouseHookedEventHandler;

            if (handler != null)
            {
                handler(this, e);
            }
        }
        private int CallNextHook(int code, MouseMessage message, ref MouseState state)
        {
            if (code >= 0)
            {
                var button = MouseButtons.None;
                switch (message)
                {
                    case MouseMessage.LDown:
                        //case MouseMessage.LUp:
                        button = MouseButtons.Left;
                        break;
                    case MouseMessage.RDown:
                        //case MouseMessage.RUp:
                        button = MouseButtons.Right;
                        break;
                    case MouseMessage.MDown:
                        //case MouseMessage.MUp:
                        button = MouseButtons.Middle;
                        break;
                    case MouseMessage.XDown:
                        //case MouseMessage.XUp:
                        if (state.XButtonData.IsXButton1) button = MouseButtons.XButton1;
                        if (state.XButtonData.IsXButton2) button = MouseButtons.XButton2;
                        break;
                    default:
                        button = MouseButtons.None;
                        break;
                }

                if ((_captureMouseButtons.Length == 0 || _captureMouseButtons.Contains(_button)) &&
                    button != MouseButtons.None)
                {
                    var e = new GlobalMouseHookedEventArgs(
                        message,
                        button,
                        IsDoubleClick(button, state),
                        IsDesktop(state),
                        ref state);
                    OnMouseHooked(e);
                    if (e.Cancel)
                        return -1;
                }
            }
            return CallNextHookEx(_hook, code, message, ref state);
        }
 /// <summary>
 ///     MouseHookedイベントを発生させる。
 /// </summary>
 /// <param name="e">イベントのデータ。</param>
 protected virtual void OnMouseHooked(GlobalMouseHookedEventArgs e)
 {
     var handler = Events[EventMouseHooked] as GlobalMouseHookedEventHandler;
     if (handler != null)
         handler(this, e);
 }