char * TMainForm::RunDOScmd(char *CommandLine) { STARTUPINFO siStartupInfo; PROCESS_INFORMATION piProcessInfo; unsigned long dwExitCode; HANDLE PipeInputRead; HANDLE PipeInputWrite; HANDLE PipeOutputRead; HANDLE PipeOutputWrite; SECURITY_ATTRIBUTES securityattribs = { sizeof(SECURITY_ATTRIBUTES), NULL, TRUE }; ZeroMemory(&siStartupInfo, sizeof(siStartupInfo)); // initialisation de la taille siStartupInfo.cb = sizeof(siStartupInfo); // Create pipe for standard output redirection CreatePipe(&PipeOutputRead, &PipeOutputWrite, &securityattribs, 0); // Create pipe for standard input redirection. CreatePipe(&PipeInputRead, &PipeInputWrite, &securityattribs, 0); siStartupInfo.dwFlags = STARTF_USESTDHANDLES; siStartupInfo.hStdInput = PipeInputRead; siStartupInfo.hStdOutput = PipeOutputWrite; siStartupInfo.hStdError = PipeOutputWrite; bool pSuccess = CreateProcess( NULL, CommandLine, NULL, NULL, true, 0, NULL, NULL, &siStartupInfo, &piProcessInfo); if (pSuccess) { CloseHandle(piProcessInfo.hThread); // fermer le handle de thread dès qu'il devient inutile WaitForSingleObject(piProcessInfo.hProcess, INFINITE); // attente jusqu'à la signalisation de la fermeture de notepad GetExitCodeProcess(piProcessInfo.hProcess, &dwExitCode); // le processus notepad est terminé if (dwExitCode != STILL_ACTIVE) CloseHandle(piProcessInfo.hProcess); // fermer le handle de process } else { MessageBox(NULL, CommandLine, "Command Line Error", MB_OK|MB_ICONSTOP); CloseHandle(PipeOutputWrite); CloseHandle(PipeInputRead); return(""); } CloseHandle(PipeOutputWrite); CloseHandle(PipeInputRead); CloseHandle(PipeInputWrite); // Read output from the child process. DWORD dwRead; CHAR chBuf[BUFSIZE]; String procstdout="",procstderr=""; while (ReadFile(PipeOutputRead, chBuf, BUFSIZE-1, &dwRead, NULL) && (dwRead != 0)) { chBuf[dwRead] = '\0'; procstdout += chBuf; this->Memo1->Text= chBuf; } while (ReadFile(PipeOutputRead, chBuf, BUFSIZE-1, &dwRead, NULL) && (dwRead != 0)) { chBuf[dwRead] = '\0'; procstderr += chBuf; } CloseHandle(PipeOutputRead);
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question