2013-07-06 22 views
0

我有一個長時間運行的控制檯應用程序,以Windows開始,或者可能由我正在編寫的應用程序啓動。來自長時間運行的控制檯應用程序(C++)的輸入和輸出文本

我已經有限的成功發送密鑰到控制檯應用程序,甚至不知道從哪裏開始讀取輸出。是否正在讀取來自甚至不可能由請求應用程序啓動的控制檯應用程序的輸出?

無論如何,兩個問題...

我怎樣才能模仿一個「返回」鍵? (這裏是我的特定鍵發送到應用程序,該應用程序確實接收到鑰匙,但我似乎無法找到如何模擬ENTER鍵。

do { 
    hwndCurrentWindow = FindWindowA("ConsoleWindowClass", "My Other Console App"); 
    if (hwndCurrentWindow == 0) { 
     break; 
    } 

    iStringLen = GetWindowTextW (hwndCurrentWindow, wcharWindowText, 500); 
    if (iStringLen == 0) { 
     continue; 
    } 

    SetActiveWindow(hwndCurrentWindow); 
    printf("Sending '?'"); 
    SendMessage(hwndCurrentWindow, WM_CHAR, '?', 0); 
    // '?' shows up in console app 
    printf("Sending 'a'"); 
    SendMessage(hwndCurrentWindow, WM_CHAR, 'a', 0); 
    // 'a' shows up in console app. 
    //printf("Sending RETURN"); 
    //SendMessage(hwndCurrentWindow, WM_CHAR, VK_RETURN, 0); 
    // nothing happens 
    break; 
} while (hwndCurrentWindow); 

我怎樣才能讀取數據控制檯應用程序?(如果其他控制檯應用程序沒有連續運行,我只需將輸出寫入文件並在...中讀取該文件即可)

我查看了一些選項,但是我閱讀的很多是C#,可惜我沒有奢侈的語言變化。對於C++有沒有類似的選擇?

Collect stdout output from a console app with C++ 這個不起作用,因爲應用程序不會退出。所以它只是掛起和等待。不斷增加更多的緩衝區。

Catch console input-output

Capturing an c# executable output from another C# program

感謝您的幫助,您可以提供!

回答

1

您需要將來自該應用程序的輸入/輸出重定向到主應用程序。這裏是文章:Creating a Child Process with Redirected Input and Output

+0

謝謝!我還看到了另一篇MSDN文章(http://support.microsoft.com/kb/190351)關於該文章的任何想法? –

+1

基本上他們做同樣的事情。您需要密切關注的一點是CreateProcess()函數調用和要使用的參數。您需要創建一組管道,然後在CreateProcess()中指定,以便它們將用於在您的應用和產生的進程之間進行通信。我相信你可以拿任何例子來獲得你需要的結果。 – Bogolt

+0

真的有幫助!我取得了巨大的成功。當我的應用程序完成時,我使用PID來殺死應用程序,並且可以從控制檯應用程序獲取輸出,但沒有運氣用WriteToPipe命令發送任何數據。即使提供文件的有效路徑也不會發送任何內容,在一個小的睡眠命令,以確保它在嘗試發送數據之前運行,或者也許我沒有看到數據被髮送,因爲沒有發送一個ENTER。關於如何將字符串發送到g_hChildStd_IN_Wr管道的任何想法?或者是g_hChildStd_IN_Rd管道?這隻用過一次。牆的文本。 –

相關問題