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