В примере показано как работает код, но нужно чтобы ответ приходил не следующей командой, а продолжением запроса.
Например пишем 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);
}
Упрощенный код, но результат тот же (ответ приходит командой):
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);
}
}
}
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
У меня есть хендл контрола, мне нужно получить текст, который он содержит, однако WM_GETTEXT возвращает пустую строку, я предполагаю, что в приложении,...
Нужно чтоб проверка деления на ноль находилась внутри лямбда виражения !
Я писал свое приложение, придерживаясь правил хорошего тона, но потом меня осенило: