private void SetPropertyValueButtonInput(String value, Object obj, PropertyInfo property)
        {
            Object output;

            if (Enum.TryParse(typeof(MouseKeyCode), value, true, out output))
            {
                var mouse = new MouseKeyInput((MouseKeyCode)output);
                property.SetValue(obj, mouse);
            }
            else if (Enum.TryParse(typeof(MouseMacro), value, true, out output))
            {
                var mouse = new MouseMacroInput((MouseMacro)output);
                property.SetValue(obj, mouse);
            }
            else if (Enum.TryParse(typeof(KeyboardKeyCode), value, true, out output))
            {
                var keyboard = new KeyboardKeyInput((KeyboardKeyCode)output);
                property.SetValue(obj, keyboard);
            }
            else if (Enum.TryParse(typeof(KeyboardMacro), value, true, out output))
            {
                var keyboard = new KeyboardMacroInput((KeyboardMacro)output);
                property.SetValue(obj, keyboard);
            }
        }
        private ButtonEventHandler KeyboardMacroEventHandler(KeyboardMacroInput input, Gamepad gamepad, Keyboard keyboard)
        {
            switch (input.Macro)
            {
            case KeyboardMacro.OnScreenKeyboard:
                return(OnScreenKeyboardEventHandler(input, gamepad, keyboard));

            default:
                return(default);
            }
        }
        private ButtonEventHandler OnScreenKeyboardEventHandler(KeyboardMacroInput input, Gamepad gamepad, Keyboard keyboard)
        {
            return((statePressed, previousStatePressed) =>
            {
                if (!statePressed && previousStatePressed && gamepad.InputState.ButtonPressCount == 0 && gamepad.PreviousInputState.ButtonPressCount == 1)
                {
                    var windowsKey = new KeyboardKeyInput(KeyboardKeyCode.Windows);
                    var ctrlKey = new KeyboardKeyInput(KeyboardKeyCode.Ctrl);
                    var oKey = new KeyboardKeyInput(KeyboardKeyCode.O);

                    keyboard.Press(windowsKey);
                    keyboard.Press(ctrlKey);
                    keyboard.Press(oKey);

                    keyboard.Release(windowsKey);
                    keyboard.Release(ctrlKey);
                    keyboard.Release(oKey);
                }
            });
        }