Главная / FAQ по Builder'у / 105 Как запустить DOS файл...

105 Как запустить DOS файл и при этом его консоль выводить на форму?



 SECURITY_ATTRIBUTES sa;
 ZeroMemory( &sa, sizeof( sa ) );
 sa.nLength = sizeof( sa );
 sa.bInheritHandle = true;
 HANDLE hRead, hWrite;

 if ( !CreatePipe( &hRead, &hWrite, &sa, 0 ) ){
     ShowMessage( "Cannot create pipe" );
     return ;
 }

 STARTUPINFO si;
 PROCESS_INFORMATION pi;
 memset( &si, 0, sizeof( si ) );
 si.hStdOutput = hWrite;// если вывод чередуется, то
 si.hStdError =  hWrite;// одно без другого работает несовсем корректно
 si.dwFlags = STARTF_USESTDHANDLES | STARTF_USECOUNTCHARS |
STARTF_USESHOWWINDOW;
 si.wShowWindow = SW_HIDE;
 si.dwXCountChars = si.dwYCountChars = 1;

 String filename = Edit1->Text;
 CreateProcess(NULL, filename.c_str(), NULL, NULL, TRUE, 0, NULL, NULL,
&si, &pi );

 CloseHandle( hWrite );
 CloseHandle( pi.hThread );
 CloseHandle( pi.hProcess );

 String rez;
 char temp[ 255 ];
 DWORD dwBytesRead;

 while ( 1 ){
   memset( temp, 0, 255 );
   if ( !ReadFile( hRead, temp, 255, &dwBytesRead, NULL ) || !dwBytesRead)
      break;

   rez += temp;
 }
 Memo1->Lines->Text = rez.c_str();
Zhukov Igor 2:5020/175.2

Предыдущий вопрос   |  Список вопросов   |   Следующий вопрос

источник      На главную      by jenyok
Copyright © 2003 JTSOFT
Сайт управляется системой uCoz