具有隐藏控制台窗口的Allocconsole()

AllocConsole() with hidden console window

本文关键字:Allocconsole 窗口 隐藏 控制台      更新时间:2023-10-16

我正在尝试启动以交互式模式运行的bash.exe作为子过程。我发现这样做的唯一方法是从控制台程序启动bash.exe,或将其启动到非辅助程序,然后启动它。看来,如果它不是从控制台程序启动的,或者至少是一个已分配了控制台的程序,则bash.exe拒绝以交互式模式启动。

由于基本程序必须是GUI程序,因此我必须使用同种程序。但是,如果这样做,则可以创建一个可见的控制台。这对于我构建的程序是不可接受的。

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

如何在没有控制台出现的情况下使用同种赛?如果不这样做,我该如何以交互式模式启动bash.exe作为GUI程序的子过程,而无需使用同种异体?

eryksun的方法有效。我使用以下设置启动该过程。然后,我可以在processID中使用Attaconsole和Freeconsole来操纵控制台。

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