Advertisement
Guest User

Untitled

a guest
Nov 11th, 2016
168
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 1.83 KB | None | 0 0
  1. function Ping(IP :String) :String;
  2. const
  3.   BUFSIZE = 2000;
  4.  
  5. var
  6.   SecAttr     :TSecurityAttributes;
  7.   hReadPipe   :THandle;
  8.   hWritePipe  :THandle;
  9.   StartupInfo :TStartUpInfo;
  10.   ProcessInfo :TProcessInformation;
  11.   Buffer      :PAnsiChar;
  12.   WaitReason  :DWord;
  13.   BytesRead   :DWord;
  14.  
  15. begin
  16.  
  17.  Result := '';
  18.  
  19.  with SecAttr do begin
  20.    nLength              := SizeOf(TSecurityAttributes);
  21.    bInheritHandle       := True;
  22.    lpSecurityDescriptor := nil;
  23.  end; { with }
  24.  
  25.  if CreatePipe(hReadPipe, hWritePipe, @SecAttr, 0) then begin
  26.  
  27.    Buffer := AllocMem(BUFSIZE + 1);
  28.  
  29.    try
  30.  
  31.      FillChar(StartupInfo, SizeOf(StartupInfo), #0);
  32.      StartupInfo.cb          := SizeOf(StartupInfo);
  33.      StartupInfo.hStdOutput  := hWritePipe;
  34.      StartupInfo.hStdInput   := hReadPipe;
  35.      StartupInfo.dwFlags     := STARTF_USESTDHANDLES + STARTF_USESHOWWINDOW;
  36.      StartupInfo.wShowWindow := SW_HIDE;
  37.  
  38.      if CreateProcess(nil, PChar('ping.exe '+IP),
  39.         @SecAttr, @SecAttr, True, NORMAL_PRIORITY_CLASS, nil, nil, StartupInfo, ProcessInfo) then begin
  40.  
  41.        try
  42.  
  43.          repeat
  44.            WaitReason := WaitForSingleObject(ProcessInfo.hProcess, 100);
  45.            Application.ProcessMessages;
  46.          until (WaitReason <> WAIT_TIMEOUT);
  47.  
  48.          repeat
  49.            BytesRead := 0;
  50.            ReadFile(hReadPipe, Buffer[0], BUFSIZE, BytesRead, nil);
  51.            Buffer[BytesRead]:= #0;
  52.            OemToAnsi(Buffer,Buffer);
  53.            Result := Result + String(Buffer);
  54.          until (BytesRead < BUFSIZE);
  55.  
  56.        finally
  57.          CloseHandle(ProcessInfo.hProcess);
  58.          CloseHandle(ProcessInfo.hThread);
  59.        end; { try ... finally }
  60.  
  61.      end; { if }
  62.  
  63.    finally
  64.      CloseHandle(hReadPipe);
  65.      CloseHandle(hWritePipe);
  66.      FreeMem(Buffer);
  67.    end; { try ... finally }
  68.  
  69.  end; { if }
  70.  
  71. end; { Ping }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement