Determine Your IP with Delphi
在 Form 上放置 2 個 TEdit 和 1 個 TButton。
uses ..., winsock; ... ... implementation {$R *.dfm} function GetIPFromHost (var HostName, IPaddr, WSAErr: string): Boolean; type // Name = array[0..100] of Char; // Delphi 7(D7) 的寫法 Name = array[0..100] of AnsiChar; // Delphi2009 以後的寫法 PName = ^Name; var HEnt: pHostEnt; HName: PName; WSAData: TWSAData; i: Integer; begin Result := False; if WSAStartup($0101, WSAData)<>0 then begin WSAErr := 'Winsock is not responding."'; Exit; end; IPaddr := ''; New(HName); if GetHostName(HName^, SizeOf(Name)) = 0 then begin HostName := StrPas(HName^); HEnt := GetHostByName(HName^); for i:=0 to (HEnt^.h_length-1) do IPaddr := Concat(IPaddr, IntToStr(Ord(HEnt^.h_addr_list^[i])) + '.'); SetLength(IPaddr, Length(IPaddr) - 1); Result := True; end else begin case WSAGetLastError of WSANOTINITIALISED: WSAErr := 'WSANotInitialised'; WSAENETDOWN : WSAErr := 'WSAENetDown'; WSAEINPROGRESS : WSAErr := 'WSAEInProgress'; end; end; Dispose(HName); WSACleanup; end; procedure TForm1.Button1Click(Sender: TObject); var Host, IP, Err: string; begin if GetIPFromHost(Host, IP, Err) then begin Edit1.Text := Host; Edit2.Text := IP; end else MessageDlg(Err, mtError, [mbOk], 0); end;
沒有留言:
張貼留言