关闭控制台而不退出
Close console without exit
是否可以在不关闭程序的情况下关闭控制台?
例如,打开一个自定义创建的控制台,或者如果我想打开一个HWND
,但不希望控制台在后台。
是的,我知道我可以使用WINAPI
和WinMain
,但我希望我的程序也能在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);
从端子上拆下。
相关文章:
- 为什么"do while"循环不断退出,即使条件计算结果为 false?
- C++:将控制台输出存储在宏中更好吗
- 在while循环中输入带有std::cin的字符串后,控制台会输出大量胡言乱语
- SSH通过/sbin/SSH无法读取RSA密钥文件(从控制台运行)
- 创建LinkedList退出,返回代码为-11(SIGSEGV)
- 当我在main中声明了我的2d数组时,为什么我的程序会退出
- C++控制台应用程序阻止退出
- 防止Visual Studio C++控制台立即退出,而无需系统("pause")或额外的获取
- 在C++中添加while循环以继续或退出控制台
- Windows 控制台应用 (C++) 具有错误的退出代码
- 控制台应用程序立即在 Visual Studio 中退出
- 在c++/cli控制台应用程序中处理停止或退出事件
- C++ 在退出 WINAPI 之前将控制台输出保存到文本文件(无 MFC)
- C++gotoxy退出控制台
- C++应用程序控制台未退出
- C++控制台未按预期退出
- 如果你的程序在运行时几乎立即退出,如何确保控制台窗口保持打开状态以读取输出
- 完成输出后,控制台应用程序退出.如何让它再次要求输入
- 关闭控制台而不退出
- 控制台程序退出