关闭控制台而不退出

Close console without exit

本文关键字:退出 控制台      更新时间:2023-10-16

是否可以在不关闭程序的情况下关闭控制台?

例如,打开一个自定义创建的控制台,或者如果我想打开一个HWND,但不希望控制台在后台。

是的,我知道我可以使用WINAPIWinMain,但我希望我的程序也能在Linux系统上执行(这里没有HWND)。

C++对控制台一无所知。如果您需要操作控制台,那么您将需要使用正在运行的系统的API来执行此操作。

要做到这一点,您可以自己提供一个通用接口,然后使用预处理器有条件地编译您需要根据操作系统符号进行的API调用。

实现这一点的常用方法是在windows上使用条件编译来实现WinMain,在其他平台上使用main

一种可能的配方:

#ifdef _WIN32
int APIENTRY WinMain(HINSTANCE, HINSTANCE, LPTSTR lpCmdLine, int)
{
    int argc;
    char ** argv;
    std::tie (argc, argv) = parse_command_line_arguments (lpCmdLine);
#else
int main (int argc, char ** argv)
{
#endif
   return 0
}

对于Windows:

我曾经在这种情况下使用ShowWindow (GetConsoleWindow(), SW_HIDE);,但如果您不需要控制台,就不应该创建控制台应用程序项目。


对于Linux:

(我不是Linux爱好者,所以你需要等待其他答案)


对于MAC:

也不是MAC开发者:)


作为最后一部分,您将需要预处理器为不同的平台编译不同的代码。

#ifdef _WIN32
//do what is required for windows
#endif
#ifdef __linux__
//do what is required for linux
#endif
#ifdef __APPLE__
//do what is required for OS x machines
#endif 

没有跨平台的方法可以做到这一点。在Linux上你可以做:

int fd = open("/dev/tty", O_RDWR);
ioctl(fd, TIOCNOTTY, NULL);

从端子上拆下。