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;
沒有留言:
張貼留言