Beispiel #1
0
        private void ProcessAxisAction(ActionAttribute action, double value, double prevValue)
        {
            const double IGNORE_THD = 0.05;

            var pressing = action.Incremental.GetValueOrDefault(defaultValue: false) && Math.Abs(value) > IGNORE_THD;
            var pressed  = Math.Abs(value) > IGNORE_THD && Math.Abs(prevValue) <= IGNORE_THD;
            var released = Math.Abs(value) <= IGNORE_THD && Math.Abs(prevValue) > IGNORE_THD;

            var delay = action.Delay.GetValueOrDefault(defaultValue: 0);

            if (action.Type == ActionType.Keyboard)
            {
                var  key        = action.Key;
                var  modKey     = action.ModifierKey;
                bool sendModKey = modKey != null && m_vkcodes.Contains(modKey) && pressed;

                if (m_vkcodes.Contains(key) && (pressing || pressed || released))
                {
                    Task.Run(() =>
                    {
                        Thread.Sleep(delay);

                        if (sendModKey)
                        {
                            WinAPI.keybd_event(m_vkcodes[modKey], 0, 0, UIntPtr.Zero);
                        }

                        WinAPI.keybd_event(m_vkcodes[key], 0, released ? WinAPI.KEYEVENTF_KEYUP : 0, UIntPtr.Zero);

                        if (sendModKey)
                        {
                            WinAPI.keybd_event(m_vkcodes[modKey], 0, WinAPI.KEYEVENTF_KEYUP, UIntPtr.Zero);
                        }
                    });
                }

                return;
            }

            var pos         = Cursor.Position;
            var mouseAction = action.MouseAction;
            var actionValue = action.Value;

            Task.Run(() =>
            {
                Thread.Sleep(delay);

                switch (mouseAction)
                {
                case MouseAction.LeftClick:
                    if (pressing || pressed || released)
                    {
                        WinAPI.mouse_event(released ? WinAPI.MOUSEEVENTF_LEFTUP : WinAPI.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
                    }
                    break;

                case MouseAction.RightClick:
                    if (pressing || pressed || released)
                    {
                        WinAPI.mouse_event(released ? WinAPI.MOUSEEVENTF_RIGHTUP : WinAPI.MOUSEEVENTF_RIGHTDOWN, 0, 0, 0, 0);
                    }
                    break;

                case MouseAction.MiddleClick:
                    if (pressing || pressed || released)
                    {
                        WinAPI.mouse_event(released ? WinAPI.MOUSEEVENTF_MIDDLEUP : WinAPI.MOUSEEVENTF_MIDDLEDOWN, 0, 0, 0, 0);
                    }
                    break;

                case MouseAction.MoveDx:
                    WinAPI.mouse_event(WinAPI.MOUSEEVENTF_MOVE, (int)(actionValue.GetValueOrDefault(defaultValue: 1) * value), 0, 0, 0);
                    break;

                case MouseAction.MoveDy:
                    WinAPI.mouse_event(WinAPI.MOUSEEVENTF_MOVE, 0, (int)(actionValue.GetValueOrDefault(defaultValue: 1) * value), 0, 0);
                    break;

                case MouseAction.MoveX:
                    if (pressing || pressed || released)
                    {
                        Cursor.Position = new System.Drawing.Point(actionValue.GetValueOrDefault(defaultValue: pos.X), pos.Y);
                    }
                    break;

                case MouseAction.MoveY:
                    if (pressing || pressed || released)
                    {
                        Cursor.Position = new System.Drawing.Point(pos.X, actionValue.GetValueOrDefault(defaultValue: pos.Y));
                    }
                    break;

                case MouseAction.ScrollWheel:
                    WinAPI.mouse_event(WinAPI.MOUSEEVENTF_WHEEL, 0, 0, (int)(actionValue.GetValueOrDefault(defaultValue: 1) * value), 0);
                    break;

                default:
                    break;
                }
            });
        }
Beispiel #2
0
        /// <summary>
        /// 指定されたactionに基づく動作を実行します。
        /// </summary>
        private void ProcessButtonAction(ActionAttribute action, bool state, bool prevState)
        {
            var pressing = action.Incremental.GetValueOrDefault(defaultValue: false) && state;
            var pressed  = !prevState && state;
            var released = prevState && !state;

            if (!pressing && !pressed && !released)
            {
                return;
            }

            var delay = action.Delay.GetValueOrDefault(defaultValue: 0);

            if (action.Type == ActionType.Keyboard)
            {
                var  key        = action.Key;
                var  modKey     = action.ModifierKey;
                bool sendModKey = modKey != null && m_vkcodes.Contains(modKey) && pressed;

                if (m_vkcodes.Contains(key))
                {
                    Task.Run(() =>
                    {
                        Thread.Sleep(delay);

                        if (sendModKey)
                        {
                            WinAPI.keybd_event(m_vkcodes[modKey], 0, 0, UIntPtr.Zero);
                            m_debugInfo.LogWriteLine("modKey press");
                        }

                        WinAPI.keybd_event(m_vkcodes[key], 0, released ? WinAPI.KEYEVENTF_KEYUP : 0, UIntPtr.Zero);

                        if (sendModKey)
                        {
                            WinAPI.keybd_event(m_vkcodes[modKey], 0, WinAPI.KEYEVENTF_KEYUP, UIntPtr.Zero);
                            m_debugInfo.LogWriteLine("modKey release");
                        }
                    });
                }

                return;
            }

            var pos         = Cursor.Position;
            var value       = action.Value;
            var mouseAction = action.MouseAction;

            Task.Run(() =>
            {
                Thread.Sleep(delay);

                switch (mouseAction)
                {
                case MouseAction.LeftClick:
                    WinAPI.mouse_event(released ? WinAPI.MOUSEEVENTF_LEFTUP : WinAPI.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
                    break;

                case MouseAction.RightClick:
                    WinAPI.mouse_event(released ? WinAPI.MOUSEEVENTF_RIGHTUP : WinAPI.MOUSEEVENTF_RIGHTDOWN, 0, 0, 0, 0);
                    break;

                case MouseAction.MiddleClick:
                    WinAPI.mouse_event(released ? WinAPI.MOUSEEVENTF_MIDDLEUP : WinAPI.MOUSEEVENTF_MIDDLEDOWN, 0, 0, 0, 0);
                    break;

                case MouseAction.MoveDx:
                    if (!released)
                    {
                        WinAPI.mouse_event(WinAPI.MOUSEEVENTF_MOVE, value.GetValueOrDefault(defaultValue: 0), 0, 0, 0);
                    }
                    break;

                case MouseAction.MoveDy:
                    if (!released)
                    {
                        WinAPI.mouse_event(WinAPI.MOUSEEVENTF_MOVE, 0, value.GetValueOrDefault(defaultValue: 0), 0, 0);
                    }
                    break;

                case MouseAction.MoveX:
                    if (pressed)
                    {
                        Cursor.Position = new System.Drawing.Point(value.GetValueOrDefault(defaultValue: pos.X), pos.Y);
                    }
                    break;

                case MouseAction.MoveY:
                    if (pressed)
                    {
                        Cursor.Position = new System.Drawing.Point(pos.X, value.GetValueOrDefault(defaultValue: pos.Y));
                    }
                    break;

                case MouseAction.ScrollWheel:
                    if (!released)
                    {
                        WinAPI.mouse_event(WinAPI.MOUSEEVENTF_WHEEL, 0, 0, value.GetValueOrDefault(defaultValue: 0), 0);
                    }
                    break;

                default:
                    break;
                }
            });
        }