我有几个问题都与一个也作为控制台应用程序运行的Windows应用程序有关。
在我的程序入口点,我有逻辑来确定是否正在传入命令行参数,如果是,我调用 AllocConsole()。这很好用,但我很好奇是否可以不弹出新的控制台窗口。所以期望用户将从命令窗口调用它,所以我希望应用程序的输出进入用户当前工作的窗口,而不是其他屏幕。此外,通过 AllocConsole()弹出的控制台窗口不是用户友好的。例如,如果用户误操作一个参数,新窗口将打开,通知用户他们的错误,然后用户必须返回到他们原来的窗口来修复错误,然后再次运行命令。基本上我正在寻找更传统的命令行体验。这在我的场景中是否可行?
下一个问题与格式化控制台输出有关。我已经在SO和MSDN上阅读了几篇文章,但我似乎无法找到一个好的答案。我目前正在做这样的事情:
Console.WriteLine("{0,0}\t\t{1,10}", item.Key, item.Value);
这很好用,但是item.Value中的值完全有可能是多行,因此包含多行。我正在寻找一个更传统的'table'布局,其中item.Value的文本仍然会换行,但是被限制在它自己的列中,而不是包含在item.Key的值下面。这是可能的,如果是的话,最好的方法是什么?
谢谢!
答案 0 :(得分:1)
我认为AttachConsole正是您所寻找的。 Pinvoke - AttachConsole包含正确的签名和样本。签名复制在www.pinvoke.net下面:
[DllImport("kernel32.dll", SetLastError = true)]
static extern bool AttachConsole(uint dwProcessId);
...(!AttachConsole(ATTACH_PARENT_PROCESS)...