Как отправить ответ в командную строку сразу после команды?

339
13 февраля 2017, 13:16

В примере показано как работает код, но нужно чтобы ответ приходил не следующей командой, а продолжением запроса.

Например пишем C:\app.exe /h /s /e и в этой же строке получаем ответ:

Проблема в том, что ответ приходит новой командой:

Код в файле Program.cs (приложение Windows Form):

using System;
using System.Linq;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using System.IO;
    static void Main(string[] args)
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        var consoleWriter = new GUIConsoleWriter();
        var form = new Form1();
        bool needRun = true;
        foreach (string arg in args)
        {
            switch (arg)
            {
                case "/h":
                    form.Check1();
                    Console.WriteLine("\r\n" + "Команда /h выполнена");
                    needRun = false;
                    break;
                case "/s":
                    form.Check2();
                    Console.WriteLine("\r\n" + "Команда /s выполнена");
                    needRun = false;
                    break;
                case "/e":
                    form.Check3();
                    Console.WriteLine("\r\n" + "Команда /e выполнена");
                    needRun = false;
                    break;
            }
        }
        if (needRun)
        {
            Application.Run(form);
        }
    }
    public class GUIConsoleWriter
    {
        private const int ATTACH_PARENT_PROCESS = -1;
        StreamWriter ConsoleWriter;
        public GUIConsoleWriter()
        {
            var stdout = Console.OpenStandardOutput();
            ConsoleWriter = new StreamWriter(stdout);
            ConsoleWriter.AutoFlush = true;
            AttachConsole(ATTACH_PARENT_PROCESS);
        }
        [DllImport("kernel32.dll")]
        private static extern bool AttachConsole(int dwProcessId);
    }
Answer 1

Упрощенный код, но результат тот же (ответ приходит командой):

using System;
using System.Linq;
using System.Windows.Forms;
using System.Runtime.InteropServices;
static class Program
{
    [DllImport("kernel32.dll")]
    private static extern bool AttachConsole(int procid);
    [STAThread]
    static void Main(string[] args)
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        var form = new Form1();
        if (AttachConsole(-1))
        {
            foreach (string arg in args)
            {
                switch (arg)
                {
                    case "/h":
                        form.Check1();
                        Console.Write(Environment.NewLine + "Команда /h выполнена");
                        break;
                    case "/s":
                        form.Check2();
                        Console.Write(Environment.NewLine + "Команда /s выполнена");
                        break;
                    case "/e":
                        form.Check3();
                        Console.Write(Environment.NewLine + "Команда /e выполнена");
                        break;
                }
            }
        }
        else
        {
            Application.Run(form);
        }
    }
}
READ ALSO
Привязка к IsEnabled

Привязка к IsEnabled

XAML часть:

258
Как получить текст контрола по хендлу

Как получить текст контрола по хендлу

У меня есть хендл контрола, мне нужно получить текст, который он содержит, однако WM_GETTEXT возвращает пустую строку, я предполагаю, что в приложении,...

251
Как сделать проверку аргумента в лямбда выражении?

Как сделать проверку аргумента в лямбда выражении?

Нужно чтоб проверка деления на ноль находилась внутри лямбда виражения !

253
Как сделать свой код непонятным для других? [требует правки]

Как сделать свой код непонятным для других? [требует правки]

Я писал свое приложение, придерживаясь правил хорошего тона, но потом меня осенило:

288