在system()调用中隐藏控制台窗口

时间:2010-06-02 15:46:26

标签: console clr c++-cli

继续 this question

每次系统调用时,该函数都会构造一组参数并将它们发送到另一个基于控制台的程序。有没有办法可以让每个电话都没有弹出控制台窗口?

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

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

所以我很开心。

1 个答案:

答案 0 :(得分: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;
}

如上所述将CreateProcess标志设置为0,辅助应用程序不会打开自己的控制台窗口,并将其输出写入父窗口。要完全静音辅助应用,请查看其他CreateProcess标记,例如CREATE_NO_WINDOW。