繁体   English   中英

如何从WPF应用程序写入命令行?

[英]How do I write to command line from a WPF application?

嗨,我知道如何编写控制台,但是如果我在程序中编写控制台并从命令行调用程序,它将不会显示任何内容。

我该如何做,以便当我说Console.WriteLine或Console.Out.Writeline ir时打印到调用它的命令提示符而不是其他地方?

再一次,我知道如何做Console.WriteLine,所以它不是:-p,除非我做错了。

据我所知,这可能与Console.SetOut(TextWriter t)有关

这是WPF应用程序,我需要它将其数据发布到命令行,同时在启动时仍保留GUI。 我已经三重检查,我的代码击中了打印行,实际上我可以看到正在打印到Visual Studio输出窗口的行,当我在没有VS的情况下手动运行它时,它不会显示在命令行中。

如果可能,我需要有条件地显示控制台。 即,如果从命令行(甚至带有命令参数)运行,则显示或发布到提示,否则不显示。

这实际上是微不足道的:

public void WriteToConsole(string message)
{
  AttachConsole(-1);
  Console.WriteLine(message);
}
[DllImport("Kernel32.dll")]
public static extern bool AttachConsole(int processId);

如果您的程序是从命令行启动的,则此方法会将您的消息写入控制台,否则将无济于事。

如果您不想在不从命令行启动的情况下使用替代输出机制,则可以采用以下方式:

public void WriteToConsole(string message)
{
  _connected = _connected || AttachConsole(-1);
  if(_connected)
    Console.WriteLine("Hello");
  else
    ... other way to output message ...
}
bool _connected;
[DllImport("Kernel32.dll")]
public static extern bool AttachConsole(int processId);

此特定任务的完整代码为:

    public static void WriteToConsole(string message)
    {
        AttachConsole(-1);
        System.Console.WriteLine(message);
        SendKeys.SendWait("{ENTER}");
        FreeConsole();
    }

    [DllImport("Kernel32.dll")]
    private static extern bool AttachConsole(int processId);

    [DllImport("kernel32.dll")]
    private static extern bool FreeConsole();

所有学分归Ray Burns和Scott Marlowe所有。

那应该工作得很好,仔细检查您的工作,并在可能的情况下发布您的代码。 您可以查看项目属性,并检查输出类型是否设置为“控制台应用程序”(无论如何,我相信它被称为:oP)

将项目类型设置为“控制台应用程序”,而不是“ Windows应用程序”。 这将导致该应用程序附加到启动它的控制台(如果尚未创建,则创建一个控制台)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM