【问题标题】:Hide the console (completely) for a Console app, but only sometimes(完全)隐藏控制台应用程序的控制台,但仅限于有时
【发布时间】:2011-08-11 14:35:27
【问题描述】:

我有一个 C# 控制台应用程序,而不是运行预构建步骤(以获取 NuGet 包)。

当我调试这个时,我想传入一个参数并显示控制台。当我不调试它时,我不想看到它。我什至不希望它在那里闪现一秒钟。

在它显示后,我找到了隐藏它的方法。但是除非我愿意将它从控制台应用程序更改为 Windows 应用程序,否则我找不到永远不会显示它的方法。 (如果我能找到一种在需要时显示控制台的方法,我会这样做。)

【问题讨论】:

标签: c# .net console-application


【解决方案1】:

构建为 Windows 应用程序并在需要时显示控制台。要在需要时显示控制台,请使用 P/Invoke 调用 AllocConsolepinvoke.net 具有您需要的声明)。

(控制台子系统进程总是获得一个控制台,如果有,则为它们的父进程,否则为新的。这是 Windows 在深层次上工作的方式。)

【讨论】:

  • 所有应用程序不都是windows应用程序吗? ;)
  • 他说的是项目+属性,应用程序选项卡中设置的名称。
【解决方案2】:

使用FreeConsoleWINAPI函数:

http://pinvoke.net/default.aspx/kernel32/FreeConsole.html

另一个解决方案是简单地切换到 WinForms 应用程序作为项目类型。届时将不会分配任何控制台(并且您不需要显示表单)。

【讨论】:

  • FreeConsole 与 ShowWindow(handle, SW_HIDE) 有同样的问题。它只对已经存在的控制台有帮助。我希望它从一开始就永远不会出现。
  • 阅读“另一种解决方案”部分。事实上,当您将“控制台应用程序”指定为项目类型时,您永远无法从一开始就隐藏控制台。
猜你喜欢
  • 1970-01-01
  • 2016-03-30
  • 2011-04-20
  • 2015-08-17
  • 2011-04-04
  • 1970-01-01
  • 2011-01-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多