2012-08-02 108 views
1

我该如何去禁止使用mingw编译器的C++应用程序的命令提示符AFTER程序已经启动.. -mwindows在链接器设置中工作良好,但我希望能够在程序运行时切换它,这可能吗?如何隐藏应用程序启动后的命令提示符?

我正在使用文本编辑器和命令行,所以没有IDE相关的答案请。

+0

你的意思是你想要的程序没有窗口/控制台? – SingerOfTheFall 2012-08-02 08:07:49

+0

@SingerOfTheFall没有控制台。是。 – iKlsR 2012-08-02 08:09:36

+0

你想在命令行运行一段时间后隐藏命令行吗?例如,用户输入后?那么你应该肯定地说出你的问题和标题。 – Zeta 2012-08-02 08:15:58

回答

2

据我所知:没有,至少没有一个单一的可执行文件。在基于Windows的控制台中打开应用程序时,它将启动conhost.exe的实例,以便为命令行应用程序提供环境。只要应用程序尚未退出,控制台主机就会运行。

很难确定在哪种情况下你需要这种行为。但是您可以创建两个应用程序 - 一个是简单的命令行应用程序,另一个是使用-mwindows编译的应用程序。后者可以称第一个。第一个退出后,第二个将继续执行。

请注意,这会让用户感到困惑,因为在他看来您的应用程序已停止(因为控制台窗口已关闭)并且-mwindow已编译的应用程序不会创建任何GUI元素。

+0

Blender可以无缝地执行此操作,既可以同时运行,也可以仅运行gui,但现在我必须接受此限制。谢谢! – iKlsR 2012-08-02 08:28:20

+0

Blender是开源的 - 查看他们的源代码 - 但是,即使是搅拌器也会产生'conhost.exe'和他们自己的'blender.exe'。也许有可能与'conhost'进程通信,但我不知道那么多的Windows编程。 – Zeta 2012-08-02 08:33:48

1

您可以使用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 codean official way of getting console HWND.

+0

这很不错。太糟糕了,它与WINAPI绑定在一起。 – iKlsR 2013-10-26 21:50:30

+0

Mingw有winapi标题,所以这不应该是一个问题。 – Basilevs 2013-10-27 04:09:15

+0

是的,我只是说它太糟糕了,它仅限于Windows。 – iKlsR 2013-10-27 13:42:05

相关问题