【问题标题】:Windows C++ CMD window switchingWindows C++ CMD 窗口切换
【发布时间】:2013-03-26 17:56:55
【问题描述】:

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

  1. 创建第一个 CMD 窗口。
  2. 执行命令。 (system("打印一些错误文本");)
  3. 创建第二个 CMD 窗口。
  4. 将系统(...)焦点更改为第二个 CMD 窗口。
  5. 执行命令。
  6. 将系统(...)焦点更改为第一个 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 窗口?如果那不可能,我该如何实现这个“管道”系统。

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

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

【问题讨论】:

  • 您不能使用 ShellExecute(..., "cmd", ...) 来定位不同的控制台窗口。请查看 AllocConsole。
  • AllocConsole 对我不起作用,因为要调用它,我首先需要调用 FreeConsole,它会关闭我需要继续运行的初始控制台窗口。两个控制台窗口都需要保持打开状态,原始的和新创建的。

标签: c++ windows cmd pipe


【解决方案1】:

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

查看文档:

【讨论】:

    猜你喜欢
    • 2016-04-25
    • 1970-01-01
    • 1970-01-01
    • 2019-04-17
    • 2020-12-04
    • 1970-01-01
    • 2022-01-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多