Определение пинга с помощью Delphi
В этой статье я расскажу об определении пинга (ping) в Delphi. Думаю, вы все знакомы со стандартоной командой windows. Если нет, то нажимаем горячую клавишу Win+R и в появившем окне вводем cmd
Откроется командная строка, и в ней набираем ping + адрес сервера, к примеру адрес своего компьютера и нажимаем enter
Теперь тоже самое мы попробуем реализовать в Delphi. Создаем новый проект File->New->VCL Form Application и кидаем на форму следующие компоненты: TButton,TLabel, TEdit и TMemo. Для более красивого отображения, можно в настройках Memo изменить цвет шрифта (Font->Color).
Для проведения пинга воспользуемся следующей процедурой:
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;
Похожие материалы
- Delphi исходники - игра Морской бой
- Погружение в Indy, редкая книга delphi
- Работа с udp протоколом, передача данных. Delphi исходник
- htmlhelp - Дополнение
- ASPack - Компрессор исполняемых файлов
Последние из рубрики
- Delphi основы работы с мышкой
- Delphi видео урок - генерация QR кода
- Сокращение интернет ссылок с помощью TinyURL