2014-02-05 49 views
0

我正在使用CreateProcess()創建基於多個控制檯的子進程。現在我有PI(Process Information)元素,例如PID,PHandle,hThread,Threadid。是否有可能使用這些元素爲該控制檯獲取Std句柄。如何在CreateProcess()之後爲控制檯獲取GetStdHandle(STD_OUTPUT_HANDLE)C++

我曾嘗試這個代碼,但在文件

bool __fastcall ProcessController::StartProcess(unsigned short WindowPosition=0) 
{ 
    PROCESS_INFORMATION pi; 
    STARTUPINFO si = {sizeof(si)}; 
    si.dwFlags = STARTF_USESHOWWINDOW; 
    si.wShowWindow = WindowPosition; 

if(CreateProcess(NULL,TEXT(PName.t_str()),NULL,NULL,true,0,NULL,NULL,&si,&pi)) 
{ 

    PHandle   =  pi.hProcess; 
    PId    =  pi.dwProcessId; 
    PThreadHandle =  pi.hThread; 
    PThreadId  =  pi.dwThreadId; 
    //////////////////////////////// 
    HANDLE hOut; 
    COORD location = {0, 0}; 
    char *buffer=NULL; 
    DWORD numberRead; 
    std::ofstream fileLog; 

    buffer = new TCHAR[BUFFER_SIZE]; 
    fileLog.open ("C:\\Users\\SWDH\\Desktop\\hem.txt"); 
    hOut = GetStdHandle(STD_OUTPUT_HANDLE); 
    ReadConsoleOutputCharacter(hOut, buffer, BUFFER_SIZE, location, &numberRead); 
    fileLog << buffer ; 
    free(buffer); 
    fileLog.close(); 

    ///////////////////////////////// 
    SetWindowHandle(); 
    return true; 
} 
    } 
+0

「CreateProcess之後」 - 你的意思是你想要子進程的輸出句柄?因爲'GetStdHandle'獲取**你的**句柄,而不是你的孩子。 – MSalters

回答

0

我認爲你正在尋找si.hStdOutput寫一些垃圾值 - 你剛剛起步過程的標準輸出。爲了得到這個填充,首先在STARTF_USESTDHANDLES標誌(在si.dwFlags)。立即在另外兩個手柄上撥打CloseHandle,因爲您不需要它們。當您完成讀取子輸出時,請關閉hStdOutput

相關問題