Tôi đang sử dụng CreateProcess() để chạy ứng dụng bảng điều khiển bên ngoài trong Windows từ ứng dụng GUI của tôi. Tôi muốn bằng cách nào đó thu thập đầu ra để biết liệu có lỗi hay không. Bây giờ tôi biết tôi phải làm điều gì đó với hStdOutput, nhưng tôi không hiểu điều gì. Tôi mới vào c + + và một lập trình viên thiếu kinh nghiệm và tôi thực sự không biết phải làm gì với một tay cầm hoặc làm thế nào để thắp sáng một đường ống.Sử dụng tay cầm để thu thập đầu ra từ CreateProcess()
Làm cách nào để nhận kết quả đầu ra cho một số loại biến (hoặc tệp)?
Đây là những gì tôi có một thời điểm:
void email::run(string path,string cmd){
WCHAR * ppath=new(nothrow) WCHAR[path.length()*2];
memset(ppath,' ',path.length()*2);
WCHAR * pcmd= new(nothrow) WCHAR[cmd.length()*2];
memset(pcmd,' ',cmd.length()*2);
string tempstr;
ToWCHAR(path,ppath); //creates WCHAR from my std::string
ToWCHAR(cmd,pcmd);
STARTUPINFO info={sizeof(info)};
info.dwFlags = STARTF_USESHOWWINDOW; //hide process
PROCESS_INFORMATION processInfo;
if (CreateProcess(ppath,pcmd, NULL, NULL, FALSE, 0, NULL, NULL, &info, &processInfo))
{
::WaitForSingleObject(processInfo.hProcess, INFINITE);
CloseHandle(processInfo.hProcess);
CloseHandle(processInfo.hThread);
}
delete[](ppath);
delete[](pcmd);
}
Mã này có thể làm cho bất kỳ lập trình viên tiếng hét đàng hoàng, nhưng (tôi thậm chí không nên nói nó :) Nó hoạt động ;-)
Các Câu hỏi: Làm thế nào để sử dụng hStdOutput để đọc đầu ra cho một tập tin (ví dụ)?
liên quan: [? Khởi động một exe/quá trình với stdin stdout và stderr] (http://stackoverflow.com/questions/5485923/launch-an-exe-process-with-stdin -stdout-and-stderr/39648986). Ngoài ra, xem [tiny-process-library] (https://github.com/eidheim/tiny-process-library) rất thuận tiện. – Delgan