![](/img/trans.png)
[英]Prevent Visual Studio C++ console exit immediately without system(“pause”) or extra get
[英]Close console without exit
是否可以在不關閉程序的情況下關閉控制台?
例如,打開自定義創建的控制台,或者如果我想打開HWND
且不希望控制台在后台運行。
是的,我知道我可以使用WINAPI
和WinMain
但是我希望我的程序也可以在Linux系統上執行(此處不帶HWND
)。
C ++不了解控制台。 如果您需要操縱控制台,那么您將需要為正在運行的系統使用API。
為此,您可以提供一個公共接口,然后使用預處理器有條件地編譯您需要基於OS符號進行的API調用。
做到這一點的常用方法是使用條件編譯來實現WinMain
在Windows中,並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);
與終端分離。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.