通过另一个应用程序在特定坐标的控制台中编写

时间:2019-06-26 10:18:49

标签: c# console console-application

我正在尝试通过另一个Windows窗体应用程序在特定坐标处编写控制台应用程序。

我知道我可以在下面的控制台应用程序中编写

       Console.SetCursorPosition(5, 6);

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

但是在这里我想在特定的坐标处编写,并且在其他应用程序中具有控制台应用程序句柄。但是,如何使用另一个应用程序的句柄在控制台应用程序内设置坐标,然后在其中编写坐标呢?

如果可以,我应该使用Win32API,然后如何使用它来设置坐标?

任何帮助将不胜感激

1 个答案:

答案 0 :(得分:0)

如果将此代码(或类似代码)放入接收代码中,则可以在已发送的字符串中包括VT move命令:

         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);
         }