2013-03-26 175 views
0

各位程序员您好,我在C++程序中遇到了一些控制台应用程序的问题,我的目标如下。Windows C++ CMD窗口切换

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

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


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

    HWND new_hWnd = NULL; 
    ShellExecute(new_hWnd, "open", "cmd.exe", NULL, NULL, SW_SHOW); 
    
  4. 第二CMD窗口这是我有问题,我一直没能重定向系统(...),以不同的CMD窗口,这就是我的一部分需要帮助,因为如果我能解决这个问题,那么步骤5,6和7将很容易完成。

我已经尝试过在线研究,并且遇到了一些使用“管道”的不同示例,但一直未能重新创建它们或理解它们。另外,我注意到有一个返回的句柄当前CMD窗口,这对我来说有点信号,应该有使用手柄CMD窗口之间切换的方式与

GetConsoleWindow(); 

功能,但因为我没有切换焦点到另一个CMD窗口我无法调用该函数来获取它的句柄。

那么,我该如何让系统(...)针对不同的带有句柄的CMD窗口?如果这是不可能的,我该如何实现这个“管道”系统。

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

如果没有简单的方法来实现“管道”,那么请张贴或指向我最好的东西(这将有助于我了解管道如何工作)的例子,你可以找到,我会继续使用它,直到我认为它出。先谢谢你!

+0

不能使用的ShellExecute(..., “CMD”,...)以定位不同的控制台窗口。而是看看AllocConsole。 – 2013-03-27 13:33:38

+0

AllocConsole不适用于我,因为为了调用它,我首先需要调用FreeConsole,它关闭了我需要继续运行的初始控制台窗口。两个控制台窗口都需要保持打开状态,原始状态和新创建的状态。 – user2115945 2013-03-27 18:35:26

回答