如何最小化控制台窗口?

7

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


我不确定这是否与你的问题相关,但我更倾向于将事情分开:制作一个简单的控制台应用程序,甚至不知道控制台API,并通过start /min myApp.exe启动它(假设你正在Windows上运行...)。 - Serge Ballesta
这个想法看起来不错,我会尝试一下!实际上我的一个用例是在运行时最小化并恢复。 - Anurag Daware
2个回答

12

我假设您的应用程序在Windows上运行(这在不同操作系统之间不可移植)。

首先,您需要使用 GetConsoleWindow() 函数获取控制台窗口的句柄,然后可以使用 ShowWindow() 根据需要隐藏/显示它。别忘了包含windows.h

ShowWindow(GetConsoleWindow(), SW_MINIMIZE);

你可以使用SW_HIDE代替SW_MINIMIZE来完全隐藏窗口(但它在应用程序刚启动时会闪现可见)。

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

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

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

1

Another option is to change

Properties... | Configuration Properties | Linker | System | Subsystem

from Console to Windows. However, you then need to add a WinMain() entry point, such as:

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

assuming unicode. To avoid confusion, I rename the console's wmain() function to something like Main(), as above. Of course printf no longer has a console to write to.


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接