2013-03-26 196 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

回答