0

各位程序员大家好,我在一个C++程序中遇到了一些控制台应用的问题,我的目标如下。

  1. 创建第一个 CMD 窗口。
  2. 执行一个命令。(system("打印一些错误文本");)
  3. 创建第二个 CMD 窗口。
  4. 将 system(...) 焦点更改为第二个 CMD 窗口。
  5. 执行一个命令。
  6. 将 system(...) 焦点更改为第一个 CMD 窗口。
  7. 执行一个命令。

所有这一切的最终目标是创建一个将由 CMD 应用程序执行的函数,该应用程序将生成另一个 CMD 窗口,在其上执行命令,然后将焦点返回到原始 CMD 窗口以继续执行其他代码。我不需要跟踪窗口,或者能够返回到它。只需创建新窗口,将焦点切换到它,执行命令,将焦点返回到原始窗口。


  1. 第一个 CMD 窗口在应用程序启动时创建。
  2. 使用 system(...) 对该窗口执行命令;工作正常。
  3. 我创建了第二个 CMD 窗口

    HWND new_hWnd = NULL;
    ShellExecute(new_hWnd, "open", "cmd.exe", NULL, NULL, SW_SHOW);
    
  4. 这是我遇到问题的地方,我无法将 system(...) 重定向到不同的 CMD 窗口,这是我需要帮助的部分,因为如果我能解决这个问题,那么步骤 5、6 和 7将很容易完成。

我尝试在网上对此进行研究,并遇到了一些使用“管道”的不同示例,但无法重新创建它们或理解它们。另外,我注意到有一个

    GetConsoleWindow();

返回当前 CMD 窗口句柄的函数,这对我来说有点暗示应该有一种方法可以通过使用句柄在 CMD 窗口之间切换,但是由于我没有将焦点切换到另一个 CMD 窗口,所以我无法调用该函数得到它的句柄。

那么,如何使 system(...) 使用句柄来定位不同的 CMD 窗口?如果那不可能,我该如何实现这个“管道”系统。

如果解决方案是后者,请尝试尽可能详细和简单,因为我在网上找到的每个示例都非常庞大且难以阅读/理解。

如果没有简单的方法来实现“管道”,那么请发帖或指出我可以找到的最好的(有助于我理解管道如何工作的)示例,我将继续使用它,直到我弄明白为止。先感谢您!

4

1 回答 1

1

您可以通过在调用时指定dwCreationFlags值来为新进程创建新控制台。CREATE_NEW_CONSOLECreateProcess

请参阅文档:

于 2015-07-16T11:07:00.807 回答