我该如何去禁止使用mingw编译器的C++应用程序的命令提示符AFTER程序已经启动.. -mwindows
在链接器设置中工作良好,但我希望能够在程序运行时切换它,这可能吗?如何隐藏应用程序启动后的命令提示符?
我正在使用文本编辑器和命令行,所以没有IDE相关的答案请。
我该如何去禁止使用mingw编译器的C++应用程序的命令提示符AFTER程序已经启动.. -mwindows
在链接器设置中工作良好,但我希望能够在程序运行时切换它,这可能吗?如何隐藏应用程序启动后的命令提示符?
我正在使用文本编辑器和命令行,所以没有IDE相关的答案请。
据我所知:没有,至少没有一个单一的可执行文件。在基于Windows的控制台中打开应用程序时,它将启动conhost.exe
的实例,以便为命令行应用程序提供环境。只要应用程序尚未退出,控制台主机就会运行。
很难确定在哪种情况下你需要这种行为。但是您可以创建两个应用程序 - 一个是简单的命令行应用程序,另一个是使用-mwindows
编译的应用程序。后者可以称第一个。第一个退出后,第二个将继续执行。
请注意,这会让用户感到困惑,因为在他看来您的应用程序已停止(因为控制台窗口已关闭)并且-mwindow
已编译的应用程序不会创建任何GUI元素。
您可以使用WinAPI功能ShowWindow来隐藏和显示任何窗口。然而,有一个怪癖 - 这个函数接受HWND句柄作为它的参数,并且没有obviuos方法来获取控制台HWND。以下是相当令人费解的方式来得到它:
HWND GetConsoleHwnd(void)
{
#define MY_BUFSIZE 1024 // Buffer size for console window titles.
HWND hwndFound; // This is what is returned to the caller.
TCHAR pszNewWindowTitle[MY_BUFSIZE]; // Contains fabricated
// WindowTitle.
TCHAR pszOldWindowTitle[MY_BUFSIZE]; // Contains original
// WindowTitle.
// Fetch current window title.
GetConsoleTitle(pszOldWindowTitle, MY_BUFSIZE);
// Format a "unique" NewWindowTitle.
TCHAR * format=_TEXT("%d/%d");
wsprintf(pszNewWindowTitle,format,
GetTickCount(),
GetCurrentProcessId());
// Change current window title.
SetConsoleTitle(pszNewWindowTitle);
// Ensure window title has been updated.
Sleep(40);
// Look for NewWindowTitle.
hwndFound=FindWindow(NULL, pszNewWindowTitle);
// Restore original window title.
SetConsoleTitle(pszOldWindowTitle);
return(hwndFound);
}
请原谅我这个肮脏的伎俩,但它完美的my code是an official way of getting console HWND.
你的意思是你想要的程序没有窗口/控制台? – SingerOfTheFall 2012-08-02 08:07:49
@SingerOfTheFall没有控制台。是。 – iKlsR 2012-08-02 08:09:36
你想在命令行运行一段时间后隐藏命令行吗?例如,用户输入后?那么你应该肯定地说出你的问题和标题。 – Zeta 2012-08-02 08:15:58