Пишите в консоли на определенных коринатах через другое приложение - PullRequest
0 голосов
/ 26 июня 2019

Я пытаюсь написать в консольном приложении по определенным координатам через другое приложение формы Windows.

Я знаю, что могу писать из консольного приложения, как показано ниже

       Console.SetCursorPosition(5, 6);

       Console.Write("This is how I can write to already defined coordinates from within console app");

Но здесь я хочу написать в определенных координатах, и у меня есть дескриптор консольного приложения в другом приложении. Но как я могу установить координаты внутри моего консольного приложения, используя дескриптор из другого приложения, а затем записать его там ??

Должен ли я использовать Win32API, если да, то как установить координаты, используя это?

Любая помощь будет оценена

1 Ответ

0 голосов
/ 26 июня 2019

Если вы добавите это (или что-то подобное) в ваш принимающий код, то вы можете включить команду перемещения VT в отправленную строку:

         const char ESC = '\x1B';
         // Do we have any VT commands in the string?
         var pos = myString.IndexOf(ESC);
         while (pos >= 0)
         {
            // Could it be a 'move to'?
            if (myString[pos + 1] == '[')
            {
               int endLocation = 0;
               // Find the command identifier
               for (int endPos = pos + 2; endPos < myString.Length && endLocation == 0; pos++)
               {
                  switch (myString[endPos])
                  {
                     // We're only handling "move to" for the moment
                     case 'H':
                        endLocation = endPos;
                        break;
                  }
               }

               if (endLocation > 0)
               {
                  var moveCmd = myString.Substring(pos + 2, endLocation - pos - 3);
                  var xy = moveCmd.Split(';');
                  var line = 0;
                  var column = 0;
                  if (xy.Length > 0) int.TryParse(xy[0], out line);
                  if (xy.Length > 1) int.TryParse(xy[1], out column);
                  Console.SetCursorPosition(column, line);

                  myString = myString.Substring(0, pos - 1) + myString.Substring(endLocation + 1);
                  pos -= 1;
               }
            }
            pos = myString.IndexOf(ESC, pos + 1);
         }
...