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

ben*_*ben 13 c# wpf console command-line

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

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

我再一次知道怎么做Console.WriteLine所以它不是那样的:-p除非我做错了.

从我可以告诉它可能与Console.SetOut(TextWriter t)有关

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

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

Ray*_*rns 32

这实际上是微不足道的:

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

如果您的程序是从命令行启动的,则此方法会将您的消息写入控制台,否则它将不执行任何操作.

如果要在未从命令行启动时使用备用输出机制,可以这样做:

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);
Run Code Online (Sandbox Code Playgroud)

  • 这很酷,但你如何得到它以便命令行提示回来?我得到的是提示,然后开始编写控制台,因此最终用户没有留下c:\>提示符. (4认同)
  • 尼斯.我有一个小问题,从命令行运行时控制台窗口(会话?)不会退出.添加它可以解决它:"SendKeys.SendWait("{ENTER}");".我还添加了对FreeConsole()的调用. (3认同)

Ree*_*sey -1

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

  • 有没有办法有条件地做到这一点?就像如果进程是从命令行运行的,它会附加到命令行,但否则它不会? (3认同)
  • @ben:你还会遇到其他问题 - Windows 2000 也不支持 WPF - http://msdn.microsoft.com/en-us/library/8z6watww.aspx (2认同)