Windows c++ CMD窗口切换

Windows C++ CMD window switching

本文关键字:窗口 CMD c++ Windows      更新时间:2023-10-16

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

    创建第一个CMD窗口。
  1. 执行命令。(system("print some error text");)
  2. 创建第二个CMD窗口。
  3. 将system(…)焦点更改为第二个CMD窗口
  4. 执行命令
  5. 将system(…)焦点更改为第一个CMD窗口
  6. 执行命令

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


  1. 第一个CMD窗口是在应用程序启动时创建的。
  2. 使用system(…)向该窗口执行命令;没问题。
  3. 我用

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

我试着在网上研究这个,遇到了一些使用"管道"的不同例子,但没有能够重新创建它们,或者理解它们。另外,我注意到有一个

    GetConsoleWindow();

函数返回一个句柄到当前的CMD窗口,这对我来说有点信号,应该有一种方法来切换CMD窗口之间使用句柄,但由于我没有切换焦点到其他CMD窗口,我不能调用该函数来获得它的句柄。

那么,我如何使系统(…)目标不同的CMD窗口与句柄?如果这是不可能的,我如何实现这个"管道"系统。

如果解决方案是后者,请尝试尽可能详细和简单,因为它的每一个例子,我在网上发现是真的很大,很难阅读/理解。

如果没有简单的方法来实现"管道",那么请张贴或指出我最好的(一些将帮助我了解管道如何工作)的例子,你可以找到,我会继续工作,直到我弄清楚。提前感谢!

通过在调用CreateProcess时指定dwCreationFlags的值CREATE_NEW_CONSOLE,可以为新进程创建一个新的控制台。

参见文档:

  • 进程创建标志:https://msdn.microsoft.com/en-us/library/windows/desktop/ms684863(v=vs.85).aspx
  • CreateProcess函数:https://msdn.microsoft.com/en-us/library/windows/desktop/ms682425(v=vs.85).aspx