2012-12-19 76 views
2

我需要創建一個子進程,作爲我的主要處理的套接字監聽器/服務器,我使用這個調用來實現這一目標:C++的Windows CreateChildProcess - 隱藏/不顯示的子進程的控制檯窗口

bSuccess = CreateProcessA(NULL, 
      cmdLineArgs, // command line 
      NULL,   // process security attributes 
      NULL,   // primary thread security attributes 
      TRUE,   // handles are inherited 
      HIGH_PRIORITY_CLASS,    // creation flags 
      NULL,   // use parent's environment 
      NULL,   // use parent's current directory 
      &siStartInfo, // STARTUPINFO pointer 
      &piProcInfo); // receives PROCESS_INFORMATION 

任何人都可以聲明爲了讓子進程窗口不顯示需要做什麼嗎?每當主要的中央過程創建一個孩子時,都不希望有一個可見的過程窗口。

以後編輯我用:

HWND hWnd = GetConsoleWindow(); 
if (hWnd != 0) 
{  
    ShowWindow(hWnd, SW_HIDE); 
} 

子進程中的主要功能,但這並不是真正的最佳解決方案的窗口仍顯示爲幾分之一秒。如果有幾個子進程,每個子進程都有自己的窗口冒泡到屏幕上,它仍然不夠優雅。是否有任何標誌設置爲編譯器生成「無控制檯」輸出?

我使用Visual Studio 2010中

回答

8

CREATE_NO_WINDOW標誌用於僅此目的。

你可以把它添加到dwCreationFlags位掩碼像這樣:

bSuccess = CreateProcessA(NULL, 
      cmdLineArgs, // command line 
      NULL,   // process security attributes 
      NULL,   // primary thread security attributes 
      TRUE,   // handles are inherited 
      HIGH_PRIORITY_CLASS | CREATE_NO_WINDOW, // creation flags 
      NULL,   // use parent's environment 
      NULL,   // use parent's current directory 
      &siStartInfo, // STARTUPINFO pointer 
      &piProcInfo); // receives PROCESS_INFORMATION 
+0

我接受這一點,因爲它是最快的解決方法(在編寫的代碼方面),但所有其他的答案都一樣有效。 +1給大家,謝謝。 – teodron

3

您必須使用STARTUPINFO結構,您提供的參數CreateProcess

STARTUPINFO StartInfo= {sizeof(StartInfo)}; 
StartInfo.dwFlags= STARTF_USESHOWWINDOW; 
StartInfo.wShowWindow= SW_HIDE;