private static void HandleMouseCommand(ExtendedCommand command, InputSimulator iis, VirtualKeyCodeContainer macro)
 {
     // Mouse Move commands
     if (command == ExtendedCommand.EXTENDED_MACRO_MOUSE_MOVE || command == ExtendedCommand.EXTENDED_MACRO_MOUSE_POS ||
         command == ExtendedCommand.EXTENDED_MACRO_MOUSE_XY ||
         command == ExtendedCommand.EXTENDED_MACRO_MOUSE_STORE_LOCATION || command == ExtendedCommand.EXTENDED_MACRO_MOUSE_RESTORE_LOCATION)
     {
         HandleMouseMoveCommand(command, iis, macro);
     }
     else if (command == ExtendedCommand.EXTENDED_MACRO_SCROLL_UP || command == ExtendedCommand.EXTENDED_MACRO_SCROLL_DOWN || command == ExtendedCommand.EXTENDED_MACRO_SCROLL_LEFT ||
              command == ExtendedCommand.EXTENDED_MACRO_SCROLL_RIGHT)
     {
         HandleMouseScrollCommand(command, iis, macro);
     }
     else if (command == ExtendedCommand.EXTENDED_MACRO_MOUSE_LEFT_DOWN ||
              command == ExtendedCommand.EXTENDED_MACRO_MOUSE_LEFT_UP ||
              command == ExtendedCommand.EXTENDED_MACRO_MOUSE_RIGHT_DOWN ||
              command == ExtendedCommand.EXTENDED_MACRO_MOUSE_RIGHT_UP ||
              command == ExtendedCommand.EXTENDED_MACRO_MOUSE_MIDDLE_DOWN ||
              command == ExtendedCommand.EXTENDED_MACRO_MOUSE_MIDDLE_UP ||
              command == ExtendedCommand.EXTENDED_MACRO_MOUSE_LEFT_DOUBLE_CLICK ||
              command == ExtendedCommand.EXTENDED_MACRO_MOUSE_RIGHT_DOUBLE_CLICK)
     {
         HandleMouseButtonCommand(command, iis);
     }
     else
     {
         Logger.Instance.LogMessage(TracingLevel.ERROR, $"HandleMouseCommand - Invalid command {command}");
     }
 }
 private static void HandleMouseScrollCommand(ExtendedCommand command, InputSimulator iis, VirtualKeyCodeContainer macro)
 {
     // Scroll UP/DOWN/LEFT/RIGHT
     if (command == ExtendedCommand.EXTENDED_MACRO_SCROLL_UP || command == ExtendedCommand.EXTENDED_MACRO_SCROLL_DOWN)
     {
         int direction = (command == ExtendedCommand.EXTENDED_MACRO_SCROLL_UP) ? 1 : -1;
         if (Int32.TryParse(macro.ExtendedData, out int mouseClicks) && mouseClicks > 0)
         {
             direction *= mouseClicks;
         }
         iis.Mouse.VerticalScroll(direction);
     }
     else if (command == ExtendedCommand.EXTENDED_MACRO_SCROLL_LEFT || command == ExtendedCommand.EXTENDED_MACRO_SCROLL_RIGHT)
     {
         int direction = (macro.ExtendedCommand == EXTENDED_COMMANDS_LIST[(int)ExtendedCommand.EXTENDED_MACRO_SCROLL_RIGHT]) ? 1 : -1;
         if (Int32.TryParse(macro.ExtendedData, out int mouseClicks) && mouseClicks > 0)
         {
             direction *= mouseClicks;
         }
         iis.Mouse.HorizontalScroll(direction);
     }
     else
     {
         Logger.Instance.LogMessage(TracingLevel.ERROR, $"HandleMouseScrollCommand - Invalid command {command}");
     }
 }
        private static void HandleKeyboardCommand(ExtendedCommand command, InputSimulator iis, VirtualKeyCodeContainer macro)
        {
            string commandText = CommandTools.ConvertSimilarMacroCommands(macro.ExtendedData.ToUpperInvariant());

            if (string.IsNullOrEmpty(commandText))
            {
                Logger.Instance.LogMessage(TracingLevel.ERROR, $"Extended Keydown/Keyup - Missing Command");
                return;
            }

            if (!Enum.TryParse <VirtualKeyCode>(commandText, true, out VirtualKeyCode code))
            {
                if (commandText.Length > 1)
                {
                    Logger.Instance.LogMessage(TracingLevel.WARN, $"Extended Keydown/Keyup Shrinking {commandText} to {commandText[0]}");
                }
                code = (VirtualKeyCode)commandText[0];
            }

            if (macro.ExtendedCommand == EXTENDED_COMMANDS_LIST[(int)ExtendedCommand.EXTENDED_MACRO_KEY_DOWN])
            {
                RepeatKeyDown(iis, code);
                //iis.Keyboard.KeyDown(code);
            }
            else
            {
                dicRepeatKeydown[code] = false;
                //iis.Keyboard.KeyUp(code);
            }
        }
        private static void HandleMouseMoveCommand(ExtendedCommand command, InputSimulator iis, VirtualKeyCodeContainer macro)
        {
            if (command == ExtendedCommand.EXTENDED_MACRO_MOUSE_MOVE || command == ExtendedCommand.EXTENDED_MACRO_MOUSE_POS ||
                command == ExtendedCommand.EXTENDED_MACRO_MOUSE_XY)  // Mouse Move
            {
                string[] mousePos = macro.ExtendedData.Split(',');
                if (mousePos.Length == 2)
                {
                    if (Double.TryParse(mousePos[0], out double x) && Double.TryParse(mousePos[1], out double y))
                    {
                        if (command == ExtendedCommand.EXTENDED_MACRO_MOUSE_POS)
                        {
                            iis.Mouse.MoveMouseToPositionOnVirtualDesktop(x, y);
                        }
                        else if (command == ExtendedCommand.EXTENDED_MACRO_MOUSE_XY)
                        {
                            System.Windows.Forms.Cursor.Position = new Point((int)x, (int)y);
                        }
                        else
                        {
                            iis.Mouse.MoveMouseBy((int)x, (int)y);
                        }
                    }
                }
                else
                {
                    Logger.Instance.LogMessage(TracingLevel.ERROR, $"HandleMouseMoveCommand - Invalid parameter {macro.ExtendedData}");
                }
            }
            else if (command == ExtendedCommand.EXTENDED_MACRO_MOUSE_STORE_LOCATION) // Mouse Store
            {
                Point point = System.Windows.Forms.Cursor.Position;
                dicVariables[MOUSE_STORED_X_VARIABLE] = point.X.ToString();
                dicVariables[MOUSE_STORED_Y_VARIABLE] = point.Y.ToString();
            }
            else if (command == ExtendedCommand.EXTENDED_MACRO_MOUSE_RESTORE_LOCATION) // Mouse Restore
            {
                if (!dicVariables.ContainsKey(MOUSE_STORED_X_VARIABLE) || !dicVariables.ContainsKey(MOUSE_STORED_Y_VARIABLE))
                {
                    Logger.Instance.LogMessage(TracingLevel.WARN, $"Restore Mouse called but no variables assigned");
                    return;
                }


                int.TryParse(dicVariables[MOUSE_STORED_X_VARIABLE], out int mouseX);
                int.TryParse(dicVariables[MOUSE_STORED_Y_VARIABLE], out int mouseY);
                System.Windows.Forms.Cursor.Position = new Point(mouseX, mouseY);
            }
            else
            {
                Logger.Instance.LogMessage(TracingLevel.ERROR, $"HandleMouseMoveCommand - Invalid command {command}");
            }
            return;
        }
예제 #5
0
 public override string ToString()
 {
     return
         (Convert.ToChar(House) +
          NibbleToHex((byte)Unit) +
          NibbleToHex((byte)Command) +
          "x" +
          ExtendedCommand.ToString("X").PadLeft(2, '0') +
          "x" +
          ExtendedData.ToString("X").PadLeft(2, '0'));
 }
예제 #6
0
 /// <summary>
 /// Creates an insteon packet with an extended command.
 /// </summary>
 /// <param name="id"></param>
 /// <param name="cmd"></param>
 public InsteonPacket(DeviceId id, ExtendedCommand cmd, byte cmd2, byte[] data)
 {
     Command1              = (byte)((int)cmd >> 8);
     Command2              = (byte)(((int)cmd & 0xff) | cmd2);
     UserData              = data;
     FromAddress           = id;
     ToAddress             = id;
     flags                 = new InsteonFlags();
     flags.MessageType     = InsteonFlags.MessageTypeEnum.Direct;
     flags.ExtendedMessage = true;
     flags.MaxHops         = 0x3;
     flags.HopsLeft        = 0x3;
 }
 /// <summary>
 /// Creates an insteon packet with an extended command.
 /// </summary>
 /// <param name="id"></param>
 /// <param name="cmd"></param>
 public InsteonPacket(DeviceId id, ExtendedCommand cmd, byte cmd2, byte[] data)
 {
     Command1 = (byte)((int)cmd >> 8);
     Command2 = (byte)(((int)cmd & 0xff) | cmd2);
     UserData = data;
     FromAddress = id;
     ToAddress = id;
     flags = new InsteonFlags();
     flags.MessageType = InsteonFlags.MessageTypeEnum.Direct;
     flags.ExtendedMessage = true;
     flags.MaxHops = 0x3;
     flags.HopsLeft = 0x3;
 }
 private static void HandleMouseButtonCommand(ExtendedCommand command, InputSimulator iis)
 {
     if (command == ExtendedCommand.EXTENDED_MACRO_MOUSE_LEFT_DOWN)
     {
         iis.Mouse.LeftButtonDown();
         return;
     }
     else if (command == ExtendedCommand.EXTENDED_MACRO_MOUSE_LEFT_UP)
     {
         iis.Mouse.LeftButtonUp();
         return;
     }
     else if (command == ExtendedCommand.EXTENDED_MACRO_MOUSE_RIGHT_DOWN)
     {
         iis.Mouse.RightButtonDown();
         return;
     }
     else if (command == ExtendedCommand.EXTENDED_MACRO_MOUSE_RIGHT_UP)
     {
         iis.Mouse.RightButtonUp();
         return;
     }
     else if (command == ExtendedCommand.EXTENDED_MACRO_MOUSE_MIDDLE_DOWN)
     {
         iis.Mouse.MiddleButtonDown();
         return;
     }
     else if (command == ExtendedCommand.EXTENDED_MACRO_MOUSE_MIDDLE_UP)
     {
         iis.Mouse.MiddleButtonUp();
         return;
     }
     else if (command == ExtendedCommand.EXTENDED_MACRO_MOUSE_LEFT_DOUBLE_CLICK)
     {
         iis.Mouse.LeftButtonDoubleClick();
         return;
     }
     else if (command == ExtendedCommand.EXTENDED_MACRO_MOUSE_RIGHT_DOUBLE_CLICK)
     {
         iis.Mouse.RightButtonDoubleClick();
         return;
     }
     else
     {
         Logger.Instance.LogMessage(TracingLevel.ERROR, $"HandleMouseButtonCommand - Invalid command {command}");
     }
 }
        public static void HandleExtendedMacro(InputSimulator iis, VirtualKeyCodeContainer macro)
        {
            try
            {
                // Index in array
                int             index   = EXTENDED_COMMANDS_LIST.ToList().FindIndex(cmd => cmd == macro.ExtendedCommand);
                ExtendedCommand command = (ExtendedCommand)index;


                // Check if it's a pause command
                if (command == ExtendedCommand.EXTENDED_MACRO_PAUSE)
                {
                    if (Int32.TryParse(macro.ExtendedData, out int pauseLength))
                    {
                        Thread.Sleep(pauseLength);
                        return;
                    }
                }
                // Keyboard commands
                else if (command == ExtendedCommand.EXTENDED_MACRO_KEY_DOWN || command == ExtendedCommand.EXTENDED_MACRO_KEY_UP)
                {
                    HandleKeyboardCommand(command, iis, macro);
                    return;
                }
                // Mouse commands
                else if (index >= (int)ExtendedCommand.EXTENDED_MACRO_MOUSE_MOVE && index <= (int)ExtendedCommand.EXTENDED_MACRO_MOUSE_RESTORE_LOCATION)
                {
                    HandleMouseCommand(command, iis, macro);
                }
                else if (command == ExtendedCommand.EXTENDED_MACRO_VARIABLE_INPUT || command == ExtendedCommand.EXTENDED_MACRO_VARIABLE_OUTPUT ||
                         command == ExtendedCommand.EXTENDED_MACRO_VARIABLE_UNSETALL || command == ExtendedCommand.EXTENDED_MACRO_VARIABLE_UNSET ||
                         command == ExtendedCommand.EXTENDED_MACRO_VARIABLE_SET || command == ExtendedCommand.EXTENDED_MACRO_VARIABLE_SET_FROM_FILE)
                {
                    HandleVariableCommand(command, iis, macro);
                }
                else
                {
                    Logger.Instance.LogMessage(TracingLevel.ERROR, $"HandleExtendedMacro - Invalid command {command}");
                }
            }
            catch (Exception ex)
            {
                Logger.Instance.LogMessage(TracingLevel.ERROR, $"Failed to parse extended macro: {macro?.ExtendedCommand} {macro?.ExtendedData} {ex}");
            }
        }
        public CreateRestoreDatabaseViewModel(
            IUnitOfWork unitOfWork
            , IConnectionstringService connectionstringService
            , IDialogService dialogService
            , INotificationService notificationService
            , IEventAggregator eventAggregator)
        {
            _unitOfWork = unitOfWork ?? throw new ArgumentNullException(nameof(unitOfWork));
            _connectionstringService = connectionstringService ?? throw new ArgumentNullException(nameof(connectionstringService));
            _dialogService           = dialogService ?? throw new ArgumentNullException(nameof(dialogService));
            _notificationService     = notificationService ?? throw new ArgumentNullException(nameof(notificationService));
            _eventAggregator         = eventAggregator ?? throw new ArgumentNullException(nameof(eventAggregator));
            (Server, Database)       = connectionstringService.GetConnectionDetails();

            SaveConnectionDetailsCommand = new ExtendedCommand(
                SaveConnectionDetails,
                () => "Änderungen speichern",
                CanSaveConnectionDetails,
                () => "Diese Funktion wird noch nicht unterstützt.");
            RefreshServersCommand   = new Command(RefreshServers);
            RefreshDatabasesCommand = new Command(RefreshDatabases, CanRefreshDatabases);
            RecreateDatabaseCommand = new Command(RecreateDatabase, CanRecreateDatabase);
        }
        private static async Task HandleVariableCommand(ExtendedCommand command, VirtualKeyCodeContainer macro, WriterSettings settings)
        {
            string upperExtendedData = macro.ExtendedData.ToUpperInvariant();

            // Variables
            if (command == ExtendedCommand.EXTENDED_MACRO_VARIABLE_INPUT)
            {
                string defaultValue = String.Empty;
                if (!String.IsNullOrEmpty(upperExtendedData) && dicVariables.ContainsKey(upperExtendedData))
                {
                    defaultValue = dicVariables[upperExtendedData];
                }

                using InputBox input = new InputBox("Variable Input", $"Enter value for \"{upperExtendedData}\":", defaultValue);
                input.ShowDialog();

                // Value exists (cancel button was NOT pressed)
                if (!string.IsNullOrEmpty(input.Input))
                {
                    dicVariables[upperExtendedData] = input.Input;
                }
            }
            else if (command == ExtendedCommand.EXTENDED_MACRO_VARIABLE_OUTPUT)
            {
                if (dicVariables.ContainsKey(upperExtendedData))
                {
                    SuperMacroWriter textWriter = new SuperMacroWriter();
                    await textWriter.SendInput(dicVariables[upperExtendedData], settings, null, false);
                }
                else
                {
                    Logger.Instance.LogMessage(TracingLevel.WARN, $"Variable Output called for {upperExtendedData} without an Input beforehand");
                }
            }
            else if (command == ExtendedCommand.EXTENDED_MACRO_VARIABLE_UNSETALL)
            {
                dicVariables.Clear();
            }
            else if (command == ExtendedCommand.EXTENDED_MACRO_VARIABLE_UNSET)
            {
                if (string.IsNullOrEmpty(upperExtendedData))
                {
                    Logger.Instance.LogMessage(TracingLevel.WARN, $"Variable Unset called without variable name");
                    return;
                }
                if (dicVariables.ContainsKey(upperExtendedData))
                {
                    dicVariables.Remove(upperExtendedData);
                }
            }
            else if (command == ExtendedCommand.EXTENDED_MACRO_VARIABLE_SET || command == ExtendedCommand.EXTENDED_MACRO_VARIABLE_SET_FROM_FILE)
            {
                if (string.IsNullOrEmpty(macro.ExtendedData))
                {
                    Logger.Instance.LogMessage(TracingLevel.WARN, $"Variable Set called without variable name");
                    return;
                }

                // last parameter "2" ensures maximum of two splits!
                var splitData = macro.ExtendedData.Split(new char[] { ':' }, 2);
                if (splitData.Length != 2)
                {
                    Logger.Instance.LogMessage(TracingLevel.WARN, $"Variable Set called without incorrect extended data: {macro.ExtendedData}");
                    return;
                }
                string varInput = splitData[1];
                string fileName = TryExtractVariable(splitData[1]);

                // Set From File but file doesn't exist
                if (command == ExtendedCommand.EXTENDED_MACRO_VARIABLE_SET_FROM_FILE && !File.Exists(fileName))
                {
                    Logger.Instance.LogMessage(TracingLevel.WARN, $"Variable SetFromFile called but file does not exist {fileName}");
                    return;
                }
                else if (command == ExtendedCommand.EXTENDED_MACRO_VARIABLE_SET_FROM_FILE) // File DOES exist
                {
                    varInput = File.ReadAllText(fileName);
                }

                dicVariables[splitData[0].ToUpperInvariant()] = varInput;
            }
            else if (command == ExtendedCommand.EXTENDED_MACRO_VARIABLE_SET_FROM_CLIPBOARD)
            {
                var value = ReadFromClipboard();

                // Value exists (cancel button was NOT pressed)
                if (!string.IsNullOrEmpty(value))
                {
                    dicVariables[upperExtendedData] = value;
                }
            }
            else if (command == ExtendedCommand.EXTENDED_MACRO_VARIABLE_OUTPUT_TO_FILE)
            {
                if (string.IsNullOrEmpty(macro.ExtendedData))
                {
                    Logger.Instance.LogMessage(TracingLevel.WARN, $"OutputToFile called without any params");
                    return;
                }

                var splitData = macro.ExtendedData.Split(new char[] { ':' }, 2);
                if (splitData.Length != 2)
                {
                    Logger.Instance.LogMessage(TracingLevel.WARN, $"OutputToFile called without incorrect extended data: {macro.ExtendedData}");
                    return;
                }

                string variableName = splitData[0].ToUpperInvariant();
                string fileName     = TryExtractVariable(splitData[1]);

                // Check if variable exists
                if (!dicVariables.ContainsKey(variableName))
                {
                    Logger.Instance.LogMessage(TracingLevel.WARN, $"OutputToFile called without non existing variable: {variableName}");
                    return;
                }

                // Try to save the data in the variable to the filename
                try
                {
                    File.WriteAllText(fileName, dicVariables[variableName]);
                }
                catch (Exception ex)
                {
                    Logger.Instance.LogMessage(TracingLevel.WARN, $"OutputToFile exception: {macro.ExtendedData} {ex}");
                }
                return;
            }
            else
            {
                Logger.Instance.LogMessage(TracingLevel.ERROR, $"HandleVariableCommand - Invalid command {command}");
            }
        }
        public static async Task HandleExtendedMacro(InputSimulator iis, VirtualKeyCodeContainer macro, WriterSettings settings, SetKeyTitle SetKeyTitleFunction)
        {
            try
            {
                // Index in array
                int             index   = EXTENDED_COMMANDS_LIST.ToList().FindIndex(cmd => cmd == macro.ExtendedCommand);
                ExtendedCommand command = (ExtendedCommand)index;

                // Check if this is a function command
                if (command == ExtendedCommand.EXTENDED_MACRO_FUNCTIONS)
                {
                    FunctionsHandler.HandleFunctionRequest(macro.ExtendedData, dicVariables);
                }
                // Check if it's a pause command
                else if (command == ExtendedCommand.EXTENDED_MACRO_PAUSE)
                {
                    string pauseLengthParam = TryExtractVariable(macro.ExtendedData);
                    if (Int32.TryParse(pauseLengthParam, out int pauseLength))
                    {
                        Thread.Sleep(pauseLength);
                        return;
                    }
                }
                // Keyboard commands
                else if (command == ExtendedCommand.EXTENDED_MACRO_KEY_DOWN || command == ExtendedCommand.EXTENDED_MACRO_KEY_UP)
                {
                    HandleKeyboardCommand(iis, macro);
                    return;
                }
                // Mouse commands
                else if (index >= (int)ExtendedCommand.EXTENDED_MACRO_MOUSE_MOVE && index <= (int)ExtendedCommand.EXTENDED_MACRO_MOUSE_RESTORE_LOCATION)
                {
                    HandleMouseCommand(command, iis, macro);
                }
                else if (command == ExtendedCommand.EXTENDED_MACRO_VARIABLE_INPUT || command == ExtendedCommand.EXTENDED_MACRO_VARIABLE_OUTPUT ||
                         command == ExtendedCommand.EXTENDED_MACRO_VARIABLE_UNSETALL || command == ExtendedCommand.EXTENDED_MACRO_VARIABLE_UNSET ||
                         command == ExtendedCommand.EXTENDED_MACRO_VARIABLE_SET || command == ExtendedCommand.EXTENDED_MACRO_VARIABLE_SET_FROM_FILE ||
                         command == ExtendedCommand.EXTENDED_MACRO_VARIABLE_SET_FROM_CLIPBOARD || command == ExtendedCommand.EXTENDED_MACRO_VARIABLE_OUTPUT_TO_FILE)
                {
                    await HandleVariableCommand(command, macro, settings);
                }
                else if (command == ExtendedCommand.EXTENDED_MACRO_STREAMDECK_SETKEYTITLE)
                {
                    if (SetKeyTitleFunction == null)
                    {
                        Logger.Instance.LogMessage(TracingLevel.ERROR, $"SETKEYTITLE called but callback function is null");
                        return;
                    }
                    string titleString = TryExtractVariable(macro.ExtendedData).Replace(@"\n", "\n");
                    SetKeyTitleFunction(titleString);
                }
                else if (command == ExtendedCommand.EXTENDED_MACRO_STREAMDECK_SETCLIPBOARD)
                {
                    SetClipboard(TryExtractVariable(macro.ExtendedData));
                }
                else
                {
                    Logger.Instance.LogMessage(TracingLevel.ERROR, $"HandleExtendedMacro - Invalid command {command}");
                }
            }
            catch (Exception ex)
            {
                Logger.Instance.LogMessage(TracingLevel.ERROR, $"Failed to parse extended macro: {macro?.ExtendedCommand} {macro?.ExtendedData} {ex}");
            }
        }
        private static void HandleVariableCommand(ExtendedCommand command, InputSimulator iis, VirtualKeyCodeContainer macro)
        {
            string upperExtendedData = macro.ExtendedData.ToUpperInvariant();

            // Variables
            if (command == ExtendedCommand.EXTENDED_MACRO_VARIABLE_INPUT)
            {
                using InputBox input = new InputBox("Variable Input", $"Enter value for \"{upperExtendedData}\":");
                input.ShowDialog();

                // Value exists (cancel button was NOT pressed)
                if (!string.IsNullOrEmpty(input.Input))
                {
                    dicVariables[upperExtendedData] = input.Input;
                }
            }
            else if (command == ExtendedCommand.EXTENDED_MACRO_VARIABLE_OUTPUT)
            {
                if (dicVariables.ContainsKey(upperExtendedData))
                {
                    iis.Keyboard.TextEntry(dicVariables[upperExtendedData]);
                }
                else
                {
                    Logger.Instance.LogMessage(TracingLevel.WARN, $"Variable Output called for {upperExtendedData} without an Input beforehand");
                }
            }
            else if (command == ExtendedCommand.EXTENDED_MACRO_VARIABLE_UNSETALL)
            {
                dicVariables.Clear();
            }
            else if (command == ExtendedCommand.EXTENDED_MACRO_VARIABLE_UNSET)
            {
                if (string.IsNullOrEmpty(upperExtendedData))
                {
                    Logger.Instance.LogMessage(TracingLevel.WARN, $"Variable Unset called without variable name");
                    return;
                }
                if (dicVariables.ContainsKey(upperExtendedData))
                {
                    dicVariables.Remove(upperExtendedData);
                }
            }
            else if (command == ExtendedCommand.EXTENDED_MACRO_VARIABLE_SET || command == ExtendedCommand.EXTENDED_MACRO_VARIABLE_SET_FROM_FILE)
            {
                if (string.IsNullOrEmpty(macro.ExtendedData))
                {
                    Logger.Instance.LogMessage(TracingLevel.WARN, $"Variable Set called without variable name");
                    return;
                }

                var splitData = macro.ExtendedData.Split(new char[] { ':' }, 2);
                if (splitData.Length != 2)
                {
                    Logger.Instance.LogMessage(TracingLevel.WARN, $"Variable Set called without incorrect extended data: {macro.ExtendedData}");
                    return;
                }
                string varInput = splitData[1];

                // Set From File but file doesn't exist
                if (command == ExtendedCommand.EXTENDED_MACRO_VARIABLE_SET_FROM_FILE && !File.Exists(splitData[1]))
                {
                    Logger.Instance.LogMessage(TracingLevel.WARN, $"Variable SetFromFile called but file does not exist {splitData[1]}");
                    return;
                }
                else if (command == ExtendedCommand.EXTENDED_MACRO_VARIABLE_SET_FROM_FILE) // File DOES exist
                {
                    varInput = File.ReadAllText(splitData[1]);
                }

                dicVariables[splitData[0].ToUpperInvariant()] = varInput;
            }
            else
            {
                Logger.Instance.LogMessage(TracingLevel.ERROR, $"HandleVariableCommand - Invalid command {command}");
            }
        }
예제 #14
0
        private static void HandleVariableCommand(ExtendedCommand command, InputSimulator iis, VirtualKeyCodeContainer macro, WriterSettings settings, SDConnection connection)
        {
            string upperExtendedData = macro.ExtendedData.ToUpperInvariant();

            // Variables
            if (command == ExtendedCommand.EXTENDED_MACRO_VARIABLE_INPUT)
            {
                string defaultValue = String.Empty;
                if (!String.IsNullOrEmpty(upperExtendedData) && dicVariables.ContainsKey(upperExtendedData))
                {
                    defaultValue = dicVariables[upperExtendedData];
                }

                using InputBox input = new InputBox("Variable Input", $"Enter value for \"{upperExtendedData}\":", defaultValue);
                input.ShowDialog();

                // Value exists (cancel button was NOT pressed)
                if (!string.IsNullOrEmpty(input.Input))
                {
                    dicVariables[upperExtendedData] = input.Input;
                }
            }
            else if (command == ExtendedCommand.EXTENDED_MACRO_VARIABLE_OUTPUT)
            {
                if (dicVariables.ContainsKey(upperExtendedData))
                {
                    SuperMacroWriter textWriter = new SuperMacroWriter(connection);
                    textWriter.SendInput(dicVariables[upperExtendedData], settings, null, false);
                }
                else
                {
                    Logger.Instance.LogMessage(TracingLevel.WARN, $"Variable Output called for {upperExtendedData} without an Input beforehand");
                }
            }
            else if (command == ExtendedCommand.EXTENDED_MACRO_VARIABLE_UNSETALL)
            {
                dicVariables.Clear();
            }
            else if (command == ExtendedCommand.EXTENDED_MACRO_VARIABLE_UNSET)
            {
                if (string.IsNullOrEmpty(upperExtendedData))
                {
                    Logger.Instance.LogMessage(TracingLevel.WARN, $"Variable Unset called without variable name");
                    return;
                }
                if (dicVariables.ContainsKey(upperExtendedData))
                {
                    dicVariables.Remove(upperExtendedData);
                }
            }
            else if (command == ExtendedCommand.EXTENDED_MACRO_VARIABLE_SET || command == ExtendedCommand.EXTENDED_MACRO_VARIABLE_SET_FROM_FILE)
            {
                if (string.IsNullOrEmpty(macro.ExtendedData))
                {
                    Logger.Instance.LogMessage(TracingLevel.WARN, $"Variable Set called without variable name");
                    return;
                }

                var splitData = macro.ExtendedData.Split(new char[] { ':' }, 2);
                if (splitData.Length != 2)
                {
                    Logger.Instance.LogMessage(TracingLevel.WARN, $"Variable Set called without incorrect extended data: {macro.ExtendedData}");
                    return;
                }
                string varInput = splitData[1];

                // Set From File but file doesn't exist
                if (command == ExtendedCommand.EXTENDED_MACRO_VARIABLE_SET_FROM_FILE && !File.Exists(splitData[1]))
                {
                    Logger.Instance.LogMessage(TracingLevel.WARN, $"Variable SetFromFile called but file does not exist {splitData[1]}");
                    return;
                }
                else if (command == ExtendedCommand.EXTENDED_MACRO_VARIABLE_SET_FROM_FILE) // File DOES exist
                {
                    varInput = File.ReadAllText(splitData[1]);
                }

                dicVariables[splitData[0].ToUpperInvariant()] = varInput;
            }
            else if (command == ExtendedCommand.EXTENDED_MACRO_VARIABLE_SET_FROM_CLIPBOARD)
            {
                var value = ReadFromClipboard();

                // Value exists (cancel button was NOT pressed)
                if (!string.IsNullOrEmpty(value))
                {
                    dicVariables[upperExtendedData] = value;
                }
            }
            else if (command == ExtendedCommand.EXTENDED_MACRO_VARIABLE_OUTPUT_TO_FILE)
            {
                if (string.IsNullOrEmpty(macro.ExtendedData))
                {
                    Logger.Instance.LogMessage(TracingLevel.WARN, $"OutputToFile called without any params");
                    return;
                }

                var splitData = macro.ExtendedData.Split(new char[] { ':' }, 2);
                if (splitData.Length != 2)
                {
                    Logger.Instance.LogMessage(TracingLevel.WARN, $"OutputToFile called without incorrect extended data: {macro.ExtendedData}");
                    return;
                }

                string variableName = splitData[0].ToUpperInvariant();
                string fileName     = splitData[1];

                // Check if variable exists
                if (!dicVariables.ContainsKey(variableName))
                {
                    Logger.Instance.LogMessage(TracingLevel.WARN, $"OutputToFile called without non existing variable: {variableName}");
                    return;
                }

                // Try to save the data in the variable to the filename
                try
                {
                    File.WriteAllText(fileName, dicVariables[variableName]);
                }
                catch (Exception ex)
                {
                    Logger.Instance.LogMessage(TracingLevel.WARN, $"OutputToFile exception: {macro.ExtendedData} {ex}");
                }
                return;
            }
            else if (command == ExtendedCommand.EXTENDED_MACRO_VARIABLE_RUN)
            {
                try
                {
                    upperExtendedData = upperExtendedData.ToLower();
                    upperExtendedData = upperExtendedData.Trim();
                    int pos = upperExtendedData.IndexOf(".exe", StringComparison.InvariantCultureIgnoreCase);
                    if (pos == -1)
                    {
                        return;
                    }
                    string exePath = upperExtendedData.Substring(0, pos + 4);
                    string args    = "";
                    if (!upperExtendedData.EndsWith(".exe"))
                    {
                        args = upperExtendedData.Substring(pos + 5, upperExtendedData.Length - (pos + 5));
                    }

                    if (File.Exists(exePath))
                    {
                        if (args != "")
                        {
                            Process.Start(exePath, args);
                        }
                        else
                        {
                            Process.Start(exePath.ToLower());
                        }
                    }
                    return;
                }
                catch (Exception ex)
                {
                    Logger.Instance.LogMessage(TracingLevel.WARN, string.Format("Run exception: {0} {1}", macro.ExtendedData, ex));
                    return;
                }
            }
            else if (command == ExtendedCommand.EXTENDED_MACRO_VARIABLE_SET_PROFILE)
            {
                try
                {
                    connection.SwitchProfileAsync(upperExtendedData).Wait();
                    return;
                }
                catch (Exception arg2)
                {
                    Logger.Instance.LogMessage(TracingLevel.WARN, string.Format("SetProfile exception: {0} {1}", macro.ExtendedData, arg2));
                    return;
                }
            }
            else
            {
                Logger.Instance.LogMessage(TracingLevel.ERROR, $"HandleVariableCommand - Invalid command {command}");
            }
        }