2

我有几个问题都与作为控制台应用程序运行的 Windows 应用程序有关。

在我的程序入口点中,我有逻辑来确定是否正在传递命令行参数,如果是,我调用AllocConsole()。这工作得很好,但我很好奇是否可以不弹出一个新的控制台窗口。所以期望用户将从命令窗口调用它,所以我希望应用程序的输出进入用户当前正在工作的窗口,而不是其他屏幕。此外,通过AllocConsole()弹出的控制台窗口不够用户友好。例如,如果用户输入错误的参数,新窗口将打开,通知用户他们的错误,然后用户必须回到原来的窗口来修复错误,然后再次运行命令。基本上我正在寻找更传统的命令行体验。在我的情况下这可能吗?

下一个问题与格式化控制台输出有关。我已经阅读了关于 SO 和 MSDN 的几篇文章,但我似乎找不到一个好的答案。我目前正在做这样的事情:

 Console.WriteLine("{0,0}\t\t{1,10}", item.Key, item.Value);

这工作得很好,但 item.Value 中的值完全有可能有几行长,因此包含几行。我正在寻找一种更传统的“表格”布局,其中 item.Value 的文本仍将换行,但仅限于其自己的列,而不是在 item.Key 的值下方换行。这是可能的,如果是的话,最好的方法是什么?

谢谢!

4

1 回答 1

1

我认为AttachConsole是您正在寻找的。Pinvoke - AttachConsole包含正确的签名和示例。从 www.pinvoke.net 复制的签名如下:

[DllImport("kernel32.dll", SetLastError = true)]
  static extern bool AttachConsole(uint dwProcessId);

...(!AttachConsole(ATTACH_PARENT_PROCESS)...
于 2012-11-12T16:21:00.230 回答