我正在使用CreateProcess()创建基于多个控制台的子进程。现在我有PI(进程信息)元素,如PID,PHandle,hThread,Threadid。是否可以使用这些元素为该控制台获取Std Handle。
我试过这段代码,但在文件中写了一些垃圾值
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 :(得分:0)
我认为你正在寻找si.hStdOutput
- 你刚刚开始的过程的标准。要填写此内容,请首先输入标记STARTF_USESTDHANDLES
(在si.dwFlags
中)。立即调用其他两个句柄上的CloseHandle
,因为您不需要它们。阅读完孩子输出后,请关闭hStdOutput
。