Windows 控制台应用程序隐藏控制台


blender 的早期版本中,启动 blender 后会先显示一个控制台窗口,接着消失,弹出新的窗口。也许意味着控制台应用程序是可以隐藏控制台的。功夫不负有心人,找到了几种解决方法:

1 - 控制控制台窗口

ShowWindow(GetConsoleWindow(), SW_HIDE);

需要用到两个 Windows API:

获取控制台窗口句柄,然后修改他的显示状态。 但是官网不建议继续使用 GetConsoleWindow 接口。

#include <stdio.h>
#include <Windows.h>

int main()
{
    bool show = true;

    while (1)
    {
        Sleep(1000);

        if (show)
        {
            ShowWindow(GetConsoleWindow(), SW_HIDE);
            show = false;
        }
        else
        {
            ShowWindow(GetConsoleWindow(), SW_SHOW);
            show = true;
        }
    }

    return 0;
}

2 - 分配/释放控制台

FreeConsole();

使用 FreeConsole 销毁控制终端的控制台。(文档

#include <stdio.h>
#include <Windows.h>

int main()
{
    bool show = true;

    while (1)
    {
        Sleep(1000);

        if (show)
        {
            FreeConsole();
            show = false;
        }
        else
        {
            AllocConsole();
            show = true;
        }
    }

    return 0;
}

这两个方法都有问题:用 cmd.exe 命令行启动这个程序是对 cmd 无效的,还会多出一个窗口。