Hi,
ich frage via
WMI Computer Informationen über das Netzwerk ab. Funktioniert auch alles wunderbar. Nur beim Auslesen der netzwerkeinstellungen habe ich Probleme.
Ich lese folgendes aus:
- Adaptername
-
IP
- Subnetmask
- Gateway
- DNS
- WINS
- MAC
Beim Auslesen des Gateways und der DNS Einstellungen habe ich Probleme. Beide geben ein Array zurück. Es kann vorkommen, dass es keine Rückgabewert gibt und stoße ich auf einen Fehler.
Mein Code:
Delphi-Quellcode:
...
try
SWbemLocator1 := CoSWbemLocator.Create;
// Für lokale Computer darf kein Benutzer und Passwort verwendet werden
if UpperCase(edt_system.Text) <> UpperCase(GetEnvironmentVariable('COMPUTERNAME')) then
aSrv := SWbemLocator1.ConnectServer(edt_system.Text,'root\cimv2',frm_main.edt_user.Text, frm_main.edt_password.Text,'','',0,vNVS)
else
aSrv := SWbemLocator1.ConnectServer(edt_system.Text,'root\cimv2','','','','',0,vNVS);
//*** Network Information ***
Counter := 0;
aObjSet := aSrv.ExecQuery('Select * from Win32_NetworkAdapterConfiguration where IPEnabled = true','WQL', 0, aNVSDummy);
pEnum := aObjSet.Get__NewEnum as IEnumVARIANT;
while (TRUE) do
begin
hRes := pEnum.Next(1, vOut, dwRetrieved);
if hRes <> S_OK then
Break;
TempArray := vOut.IPAddress;
if (TempArray[0] <> '0.0.0.0') and (TempArray[0] <> '') then
begin
DNS := '';
ANetwork[Counter].gw := VarToStr(vOut.DefaultIPGateway[0]); // ---> hier kommt der Fehler wenn kein Wert vorhanden ist
TempArray := vOut.DNSServerSearchOrder; // ---> hier kommt der Fehler wenn kein Wert vorhanden ist
for i := 0 to Length(TempArray) - 1 do
begin
if i = 0 then
DNS := vOut.DNSServerSearchOrder[i]
else
DNS := DNS + ', ' + vOut.DNSServerSearchOrder[i];
end;
ANetwork[Counter].dns := DNS;
Inc(Counter);
end;
end;
...
Ich habe es mit folgender Abfrage versucht aber es hat auch nicht funktioniert. Beispielhaft für das Gateway.
Delphi-Quellcode:
if vOut.DefaultIPGateway <> NULL then
ANetwork[Counter].gw := VarToStr(vOut.DefaultIPGateway[0])
else
ANetwork[Counter].gw := '';
Wenn DefaultIPGateway jetzt keinen Wert hat, funktioniert es. Sollte aber ein Wert kommen, läuft die IF Abfrage auf einen Fehler.
Wie kann ich prüfen, ob ein Wert kommt oder nicht in Abhängigkeit des Rückgabewertes?
Ich bin für jede Hilfestellung dankbar. Denn ich verzweifel langsam.
Gruß, Sven