2010-06-02 63 views
0

this question隐藏控制台窗口系统中的()调用

随着每个系统调用继续,函数构造的一组参数,并将它们发送到关闭只是基于控制台-另一个程序。有没有一种方法可以让每个呼叫都不会弹出控制台窗口?

我已经完成了搜索,但那些不是链接器问题的人不适合我。例如,我尝试了_execl调用和System::Diagnostics::Process^ myProcess = gcnew System::Diagnostics::Process;,但他们不工作。

_execl将带来一个控制台窗口,滚动一堆东西(从我打电话给我猜的程序),然后关闭我的应用程序,甚至没有做它应该做的事情。 System::Diagnostics::Process^ myProcess = gcnew System::Diagnostics::Process;似乎没有执行我想要的,因为输出文件夹应该包含文件,不包含任何内容。

所以我很乐意。

回答

1

CreateProcess API为您提供所需的控制。例如:

#include <windows.h> 

using namespace System; 

int main(array<System::String ^> ^args) 
{ 
    STARTUPINFO   si; 
    PROCESS_INFORMATION pi; 
    TCHAR    cmdLine[MAX_PATH] = L"myOtherApp.exe -with -some -args"; 

    ::ZeroMemory(&si, sizeof(si)); 
    si.cb = sizeof(si); 

    ::CreateProcess(NULL, cmdLine, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi); 

    Console::ReadLine(); 
    return 0; 
} 

设置为0如上,二级应用程序不打开自己的控制台窗口中的CreateProcess的标志,它的输出写到父窗口。要完全停用辅助应用,请查看其他CreateProcess标志,例如CREATE_NO_WINDOW。