Определении пинга (ping) в Delphi.

Опубиковано: 24.03.2013 г., автор: , просмотров: 9009

Определение пинга с помощью Delphi

В этой статье я расскажу об определении пинга (ping) в Delphi. Думаю, вы все знакомы со стандартоной командой windows. Если нет, то нажимаем горячую клавишу Win+R и в появившем окне вводем cmd

Программа определение пинга

Откроется командная строка, и в ней набираем ping + адрес сервера, к примеру адрес своего компьютера и нажимаем enter

Программа определение пинга2

Теперь тоже самое мы попробуем реализовать в Delphi. Создаем новый проект File->New->VCL Form Application и кидаем на форму следующие компоненты: TButton,TLabel, TEdit и TMemo. Для более красивого отображения, можно в настройках Memo изменить цвет шрифта (Font->Color).

Программа определение пинга2

Для проведения пинга воспользуемся следующей процедурой:

procedure Ping(IP: String; OutS: TStrings); const BUFSIZE = 2000; var SecAttr: TSecurityAttributes; hReadPipe, hWritePipe: THandle; StartupInfo: TStartUpInfo; ProcessInfo: TProcessInformation; Buffer: PAnsiChar; WaitReason, BytesRead: DWord; begin with SecAttr do begin nlength := SizeOf(TSecurityAttributes); binherithandle := true; lpsecuritydescriptor := nil; end; if Createpipe(hReadPipe, hWritePipe, @SecAttr, 0) then begin Buffer := AllocMem(BUFSIZE + 1); FillChar(StartupInfo, SizeOf(StartupInfo), #0); StartupInfo.cb := SizeOf(StartupInfo); StartupInfo.hStdOutput := hWritePipe; StartupInfo.hStdInput := hReadPipe; StartupInfo.dwFlags := STARTF_USESTDHANDLES + STARTF_USESHOWWINDOW; StartupInfo.wShowWindow := SW_HIDE; if CreateProcess(nil, PChar('ping.exe ' + IP), @SecAttr, @SecAttr, true, NORMAL_PRIORITY_CLASS, nil, nil, StartupInfo, ProcessInfo) then begin repeat WaitReason := WaitForSingleObject(ProcessInfo.hProcess, 100); Application.ProcessMessages; until (WaitReason <> WAIT_TIMEOUT); Repeat BytesRead := 0; ReadFile(hReadPipe, Buffer[0], BUFSIZE, BytesRead, nil); Buffer[BytesRead] := #0; OemToAnsi(Buffer, Buffer); OutS.Add(String(Buffer)); until (BytesRead < BUFSIZE); end; FreeMem(Buffer); CloseHandle(ProcessInfo.hProcess); CloseHandle(ProcessInfo.hThread); CloseHandle(hReadPipe); CloseHandle(hWritePipe); end; end;

В эту процедуру передается ip адрес сервера и массив строк, в который будет выведен результат. Немного о самой процедуре. Она использует системное приложение ping.exe, в которое передает адрес и получает выходную информацию. Аналогичное действие происходит при пинге через командную строку. Теперь на событие OnClick кнопки напишем

procedure TForm1.Button1Click(Sender: TObject); begin Ping(Edit1.Text, Memo1.Lines); end;

procedure TForm1.Button1Click(Sender: TObject); begin Ping(Edit1.Text, Memo1.Lines); end;

Программа определение пинга4

Скачать исходник



Похожие материалы

Последние из рубрики

Вася Пупкин 25 Июн 2015 в 14:56 #
код форматировать нужно , а то не читабельно а исходник качать лениво
Егор 24 Мар 2013 в 00:00 #
Огромное спасибо!!!!
Сам по себе исходник чесно говоря пустоват!
Но, я как раз пишу программу где я найду ему применение - СПАСИБО!!!

ОтменитьДобавить комментарий