Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.09.2015, 23:13   #11
ДралсяСошибками
Форумчанин
 
Аватар для ДралсяСошибками
 
Регистрация: 31.05.2011
Сообщений: 301
По умолчанию

который в пятом посте.

Вот рабочий пример:
Код:
function PingConsole(CmdLine: String): String;
var
  SA: TSecurityAttributes;
  SI: TStartupInfo;
  PI: TProcessInformation;
  Buffer: Array[0..255] of Char;
  PipeRead, PipeWrite: THandle;
  ByteRead: Cardinal;
  Handle, Ret: Boolean;
begin
  with SA do
    begin
      nLength := SizeOf(SA);
      bInheritHandle := True;
      lpSecurityDescriptor := nil;
    end;
  CreatePipe(PipeRead, PipeWrite, @SA, 0);
    try
      with SI do
        begin
          FillChar(SI, SizeOf(SI), 0);
          cb := SizeOf(SI);
          dwFlags := STARTF_USESHOWWINDOW or STARTF_USESTDHANDLES;
          wShowWindow := SW_HIDE;
          hStdInput := GetStdHandle(STD_INPUT_HANDLE);
          hStdOutput := PipeWrite;
          hStdError := PipeWrite;
        end;
      Handle := CreateProcess(nil, PChar(CmdLine), nil, nil, True, 0, nil, nil, SI, PI);
      CloseHandle(PipeWrite);
        if Handle then
          try
            repeat
              Ret := ReadFile(PipeRead, Buffer, 255, ByteRead, nil);
                if ByteRead > 0 then
                  begin
                    Buffer[ByteRead] := #0;
                    OemToAnsi(Buffer, Buffer);
                    Result := Result + Buffer;
                  end;
            until not Ret or (ByteRead = 0);
            WaitForSingleObject(PI.hProcess, INFINITE);
          finally
            CloseHandle(PI.hThread);
            CloseHandle(PI.hProcess);
          end
      else raise Exception.Create(SysErrorMessage(GetLastError));
    finally
      CloseHandle(PipeRead);
    end;
end;
Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
  Memo1.Text := PingConsole('ping 192.168.1.1');
end;
ДралсяСошибками вне форума Ответить с цитированием
Старый 02.09.2015, 23:34   #12
xxbesoxx
Участник клуба
 
Регистрация: 10.08.2010
Сообщений: 1,389
По умолчанию

Я думаю для ping вот так лучше http://www.programmersforum.ru/showthread.php?t=281833 на #6
xxbesoxx вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не работают файловые операции через cmd\bat 100GRamm Операционные системы общие вопросы 8 26.04.2013 13:21
узнать ip адрес сервера в локальной сети через cmd ArtemSakh Windows 6 20.01.2013 08:58
Cmd через Паскаль zhenka619 Паскаль, Turbo Pascal, PascalABC.NET 9 17.08.2012 13:40
Ввод строк через CMD (командная строка) RIO Общие вопросы C/C++ 2 26.04.2011 02:00
Доступ к MySQL через CMD Phantom SQL, базы данных 2 11.06.2010 17:33