Toto zoberie prvu adresu, ktoru najde (okrem 127.0.0.1).
Kód:
uses IPHlpAPI;
procedure TfrmMain.DetectIP;
var IPAddrRow: TMibIPAddrRow;
TableSize, ErrorCode, NumEntries: DWord;
I: Integer;
pBuf: PChar;
begin
MyIP := 0;
LoadIpHlp;
TableSize := 0;
// first call: get table length
ErrorCode := GetIpAddrTable(Nil, @TableSize, true);
if Errorcode <> ERROR_INSUFFICIENT_BUFFER then Exit;
GetMem(pBuf, TableSize);
// get table
ErrorCode := GetIpAddrTable(PTMibIPAddrTable(pBuf), @TableSize, true);
if ErrorCode = NO_ERROR then
begin
NumEntries := PTMibIPAddrTable(pBuf)^.dwNumEntries;
if NumEntries > 0 then
begin
for i := 1 to NumEntries do
begin
IPAddrRow := PTMIBIPAddrRow(pBuf+SizeOf(DWord)+(I-1)*SizeOf(TMIBIPAddrRow))^;
if (IPAddrRow.dwAddr<>0) then
begin
MyIP := IPAddrRow.dwAddr;
MyMask := IPAddrRow.dwMask;
Bcast := MyIP and MyMask or not MyMask;
if MyIP<>$100007F then Break; // 127.0.0.1
end;
end;
end;
end;
FreeMem(pBuf);
if MyIP=0 then
begin
ShowMessage(MSG_ERROR, 'Unable to detect network settings');
Exit;
end;
StatusBar.Panels[1].Text := 'IP: '+UDPSocket.IPtoDotDot(MyIP);
StatusBar.Panels[2].Text := 'Mask: '+UDPSocket.IPtoDotDot(MyMask);
StatusBar.Panels[3].Text := 'Broadcast: '+UDPSocket.IPtoDotDot(Bcast);
ShowMessage(MSG_SYSTEM, 'Detected '+StatusBar.Panels[1].Text+', '+StatusBar.Panels[2].Text+', '+StatusBar.Panels[3].Text);
end;