2

我需要为我的主进程创建一个子进程作为套接字侦听器/服务器,并使用此调用来实现目标:

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。

4

3 回答 3

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 
于 2012-12-19T14:44:04.037 回答
3

您必须使用STARTUPINFO作为参数提供的结构CreateProcess

STARTUPINFO StartInfo= {sizeof(StartInfo)};
StartInfo.dwFlags= STARTF_USESHOWWINDOW;
StartInfo.wShowWindow= SW_HIDE;
于 2012-12-19T14:44:34.083 回答
1
siStartInfo.dwFlags &= STARTF_USESHOWWINDOW;
siStartInfo.wShowWindow = SW_HIDE;

应该这样做

另请查看http://msdn.microsoft.com/en-us/library/windows/desktop/ms686331(v=vs.85).aspx

于 2012-12-19T14:45:44.033 回答