Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Зауск DOS приложения в фрейме своей программы


Николай1984 ©   (2008-03-04 10:21:00) 

Уважаемые Мастера, подскажите пожалуйста каким образом можно заустить DOS приложения в фрейме своей программы
Например как это делает Console 2.0 от nMarko Bozikovic.


Palladin   (2008-03-04 11:52:00) [1]

Procedure NaprimerKakEtoDelaetConsole20otnMarkoBozikovic(Const App:String;AMemo:TMemo);
Const
 ReadBuffer = 2400;
Var
 Security            : TSecurityAttributes;
 ReadPipe,WritePipe  : THandle;
 start               : TStartUpInfo;
 ProcessInfo         : TProcessInformation;
 Buffer              : PChar;
 BytesRead           : DWord;
 Apprunning          : DWord;

Begin
 AMemo.Lines.Add('');
 Security.nLength:=SizeOf(TSecurityAttributes);
 Security.bInheritHandle:=True;
 Security.lpSecurityDescriptor:=Nil;

 If Createpipe(ReadPipe,WritePipe,@Security,0) Then
  Begin
   GetMem(Buffer,ReadBuffer+1);
   ZeroMemory(@Start,Sizeof(Start));
   start.cb          :=SizeOf(start);
   start.hStdOutput  :=WritePipe;
   start.hStdInput   :=ReadPipe;
   start.dwFlags     :=STARTF_USESTDHANDLES+STARTF_USESHOWWINDOW;
   start.wShowWindow :=SW_HIDE;

   If CreateProcess(nil,PChar(App),@Security,@Security,True,NORMAL_PRIORITY_CLASS,Nil, PChar(vtvTempPath+'$DS2\'),start,ProcessInfo) Then
    Begin
     Repeat
      Apprunning:=WaitForSingleObject(ProcessInfo.hProcess,100);
      Application.ProcessMessages;
     Until (Apprunning<>WAIT_TIMEOUT);
     Repeat
      BytesRead:=0;
      ReadFile(ReadPipe,Buffer[0],ReadBuffer,BytesRead,Nil);
      Buffer[BytesRead]:=#0;
      OemToAnsi(Buffer,Buffer);
      AMemo.Text:=AMemo.Text+String(Buffer);
     Until (BytesRead<ReadBuffer);
    End;
  FreeMem(Buffer);
  CloseHandle(ProcessInfo.hProcess);
  CloseHandle(ProcessInfo.hThread);
  CloseHandle(ReadPipe);
  CloseHandle(WritePipe);
 End;
End;


Dimaxx   (2008-03-04 10:44:00) [2]

Запустить его через CreateProcess и перенаправить консоль на Мемо...


Наверх

Титульная страница Поиск, карта сайта Написать письмо