Hallo,
hier eine ganz kurze Lösung für dein Problem:
Du musst UPNP.dll importieren und in uses muss
activex stehen.
Delphi-Quellcode:
function getglobalip:string;
var
UPnPDeviceFinder : IUPnPDeviceFinder;
UPnpDevices : IUPnpDevices;
EnumVariant, EnumVariant2 : IEnumVariant;
rgvar, rgvar2 : OleVariant;
celtFetched, celtFetched2 : Cardinal;
UPnpDevice : IUPnpDevice;
Erg : HResult;
UPnpService : IUPnpService;
res,res1,t2:olevariant;
begin
result:='Error';
UPnPDeviceFinder := CoUPnPDeviceFinder.Create;
UPnpDevices := UPnPDeviceFinder.FindByType('urn:schemas-upnp-org:service:WANIPConnection:1', 0);
EnumVariant := IEnumVariant(UPnpDevices._NewEnum);
EnumVariant.Next(1, rgvar, celtFetched);
UPnpDevice := IUPnpDevice(IUnknown(rgvar));
EnumVariant2 := IEnumVariant(UPnpDevice.Services._NewEnum);
Erg := EnumVariant2.Next(1, rgvar2, celtFetched2);
Erg := EnumVariant2.Next(1, rgvar2, celtFetched2);
UPnpService := IUPnPService(IDispatch(rgvar2));
res := VararrayCreate([0, 1], varVariant);
res1 := VararrayCreate([0, 0], varVariant);
t2:=UPnpService.InvokeAction('GetExternalIPAddress',res1,res);
result:=res[0];
end;
Achtung: In dieser Routine sind keine Sicherheitsabfragen und sie ist ausschliesslich auf Fritzbox WLAN 2+ zugeschnitten. Doppelte Programmzeilen sind kein Fehler sondern absolut nötig.
Aber Achtung: Ohne die Mithilfe einiger lieber Kollegen und dem Intel Devicespy Tool ist es kaum möglich dahinterzukommen was hier gespielt wird.
Rainer