【问题标题】:How to minimize console window?如何最小化控制台窗口?
【发布时间】:2014-06-24 06:13:03
【问题描述】:

我正在运行一个 C++ 控制台应用程序, 在一段时间内,
我想最小化运行我的应用程序的窗口。
例如。我从 cmd 启动 myApp.exe。然后它在新窗口中启动。
那么什么是可以最小化应用程序运行窗口的库。
应用程序没有任何图形用户界面

【问题讨论】:

  • 我不知道它是否与您的问题有关,但我更喜欢分开一些事情:使应用程序成为甚至不知道控制台 API 的简单控制台应用程序并通过 @ 启动它987654321@(假设你在Windows上运行...)
  • 这似乎是个好主意,我会试试这个!实际上,我的一个用例是在运行时最小化并恢复

标签: c++ windows console


【解决方案1】:

我想您的应用程序正在 Windows 上运行(这不能跨不同的操作系统移植)。

您必须首先使用GetConsoleWindow() 函数处理您的控制台窗口,然后您可以根据需要使用ShowWindow() 隐藏/显示它。不要忘记包含windows.h

ShowWindow(GetConsoleWindow(), SW_MINIMIZE);

您可以使用SW_HIDE 代替SW_MINIMIZE 来完全隐藏它(但它会在应用程序刚启动时闪烁一次可见)。

请注意,如果您可以控制进程创建,则可以将其创建为DETACHED_PROCESS:分离的控制台应用程序没有控制台窗口。 CreateProcess() 函数还有其他你可能感兴趣的解决方法(例如,你可以创建一个子进程来输出......)

更新:作为Patrick's answer 的后续,您可以将子系统从控制台更改为Windows,然后,如果您需要写入控制台,请使用AllocConsole 创建一个新子系统:

if (AllocConsole()) {
    printf("Now I can print to console...\n");
    FreeConsole();
}

【讨论】:

    【解决方案2】:

    另一种选择是改变

    属性... |配置属性 |链接器 |系统 |子系统

    控制台Windows。 但是,您随后需要添加一个 WinMain() 入口点,例如:

      int __stdcall WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
      { int argc = 0;
        LPWSTR* argv = CommandLineToArgvW(GetCommandLine(), &argc);    
        return Main(argc, argv);
      }
    

    假设是 unicode。为避免混淆,我将控制台的 wmain() 函数重命名为 Main() 之类的函数,如上所示。当然 printf 不再有可以写入的控制台。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-01
      • 2021-03-14
      相关资源
      最近更新 更多