Тема: Cmd
Показать сообщение отдельно
  #2  
Старый 22.11.2006, 16:25
Аватар для Decoding
Decoding Decoding вне форума
Местный
 
Регистрация: 03.06.2006
Адрес: Почту найдете на моем сайте
Сообщения: 576
Версия Delphi: D10.2
Репутация: 214
По умолчанию

Примерно так:

Код:
procedure RunDosInMemo( CmdLine: string; AMemo: TMemo );
const
  ReadBuffer = 2400;
var
  Security: TSecurityAttributes;
  ReadPipe, WritePipe: THandle;
  start: TStartUpInfo;
  ProcessInfo: TProcessInformation;
  Buffer: Pchar;
  BytesRead: DWord;
  Apprunning: DWord;
begin
   Screen.Cursor := CrHourGlass;
   with Security do
   begin
      nlength := SizeOf( TSecurityAttributes );
      binherithandle := true;
      lpsecuritydescriptor := nil;
   end;
   if Createpipe( ReadPipe, WritePipe, @Security, 0 ) then
   begin
      Buffer := AllocMem( ReadBuffer+1 );
      FillChar( Start, Sizeof( Start ), #0 );
      start.cb := SizeOf( start );
      start.hStdOutput := WritePipe;
      start.hStdInput := ReadPipe;
      start.dwFlags := STARTF_USESTDHANDLES + STARTF_USESHOWWINDOW;
      start.wShowWindow := SW_HIDE;
      if CreateProcess( nil, PChar( CmdLine ), @Security, @Security, true,
                        NORMAL_PRIORITY_CLASS, nil, nil,  start, ProcessInfo ) then
      begin
         repeat
            Apprunning := WaitForSingleObject( ProcessInfo.hProcess, 100 );
            ReadFile( ReadPipe, Buffer[0], ReadBuffer, BytesRead, nil );
            Buffer[BytesRead] := #0;
            OemToAnsi( Buffer, Buffer );
            AMemo.Text := AMemo.text + string( Buffer );
            Application.ProcessMessages;
         until ( Apprunning <> WAIT_TIMEOUT );
      end;
      FreeMem( Buffer );
      CloseHandle( ProcessInfo.hProcess );
      CloseHandle( ProcessInfo.hThread );
      CloseHandle( ReadPipe );
      CloseHandle( WritePipe );
   end;
   Screen.Cursor := CrDefault;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
   Memo1.Clear;
   Button1.Enabled := false;
   RunDosInMemo( 'ping 127.0.0.1', Memo1 );
   // RunDosInMemo( 'net send 127.0.0.1 Привет', Memo1 );
   Button1.Enabled := true;
end;
а Edit'ы сам добавишь.
Ответить с цитированием