带有隐藏控制台窗口的AllocConsole()

时间:2017-10-03 19:19:14

标签: c++ winapi windows-console

我尝试以交互模式运行bash.exe作为子进程。我发现这样做的唯一方法是从控制台程序启动bash.exe,或者从AllocConsole()启动到非控制台程序,然后启动它。似乎如果它没有从控制台程序启动,或者至少是已经分配了控制台的程序,bash.exe拒绝以交互模式启动。

由于基本程序必须是GUI程序,我必须使用AllocConsole。但是,如果我这样做,这将创建一个可见的控制台。这对于我正在建设的计划来说是不可接受的。

我知道如何创建隐藏的子进程,但是弹出的控制台来自AllocConsole,而不是CreateProcess。有很多这样的问题,但大多数问题以解决方法结束,似乎我的情况排除了我能找到的所有解决方法。

如何在没有控制台出现的情况下使用AllocConsole?如果不这样做,如何在交互模式下将bash.exe作为GUI程序的子进程启动,而不使用AllocConsole?

1 个答案:

答案 0 :(得分:0)

eryksun的方法奏效了。我使用以下设置启动该过程。然后我可以使用AttachConsole和FreeConsole与processId来操作控制台。

siStartInfo.wShowWindow = SW_HIDE;
siStartInfo.dwFlags = STARTF_USESHOWWINDOW;

    BOOL success = CreateProcess(
        applicationAddress, // absolute path to the application
        TEXT("-i"),         // command line 
        NULL,               // process security attributes 
        NULL,               // primary thread security attributes 
        TRUE,               // handles are inherited 
        CREATE_NEW_CONSOLE,               // creation flags 
        NULL,               // use parent's environment 
        NULL,               // use parent's current directory 
        &siStartInfo,       // STARTUPINFO pointer 
        &piProcInfo);       // receives PROCESS_INFORMATION