Da unser Chak-o-tay ab und zu bei
www.ensacom.de Tipps veröffentlicht, habe ich mal von dort die
IP-Funktion abgeschrieben (mehr oder weniger
):
Delphi-Quellcode:
uses
WinSock;
function GetLocalIPs: string;
type
PPInAddr = ^PInAddr;
var
wsadata : TWSAData;
hostinfo : PHostEnt;
addr : PPInAddr;
begin
Result := '';
if(WSAStartUp(MAKEWORD(1,1),wsadata) = 0) then
try
hostinfo := gethostbyname(nil);
if(hostinfo <> nil) then begin
addr := pointer(hostinfo^.h_addr_list);
while(addr^ <> nil) do begin
Result := Result + inet_ntoa(addr^^) + ^M^J;
inc(addr);
end;
end;
finally
WSACleanUp;
end;
end;
Warum?
Weil sie -laut Beschreibung!- alle IPs zurückliefert. Mangels LAN kann ich das im Moment zwar nicht prüfen, aber ich vertraue einfach mal darauf, dass bei ensacom kein Blödsinn steht. (Wer ein LAN hat bzw. eine eingebaute Netzwerkkarte, kann´s ja mal fix testen und Bescheid sagen.)
Übrigens: MAKEWORD(1,1) ist das selbe wie $0101. Ich finde es nur lesbarer, weil man die Versionsnummer ohne viel Rumraten erkennt und einstellen kann. Ohne groß zu Überlegen: wie würde man hexadezimal die Version 2.0 angeben? Wer jetzt gedacht hat
$0200 liegt leider falsch. Anders herum wäre richtig: $0002; da das niederwertige Byte die Hauptversionsnummer angibt.
So ein Missgeschick kann mit MAKEWORD(2,0) nicht geschehen.
Kann man im
PSDK zu "WSAStartup" nachlesen.