Hallo Soulis, erstmal danke für deine Geduld doch ich muss dir erneut sagen, dass ich dir leider nicht ganz folgen kann. Die "IPaddress" einer Instanz wird also nicht in einem String sondern in einem Array of Strings ausgegeben soviel habe ich glaube ich verstanden.
Ich habe mir jetzt eine andere laufende Funktion zusammengebastelt in der ich die Instanzen mit einem zuvor definierten Adapternamen "FAdapter" vergleiche. Sobald dieser gefunden wurde soll die
IP-Adresse ausgelesen werden. Zum testen habe ich anstatt "IPAdress" einfach "SettingID" (ein anderes Atribut) genommen da hier ein String pro Instanz übergeben wird. Das ganze funktioniert soweit. Es gilt also "nur" nur noch das mit "Address" statt wie im Code zu sehen "SettingID" hinzubekommen. Da bräuchte eben noch Hilfe
Delphi-Quellcode:
function GetIPAddress :
string;
var
wmi : variant;
wmiService : variant;
nicstatus : variant;
card : Olevariant;
cnt : integer;
Enum: IEnumVariant;
P : IUnknown;
F : Cardinal;
cardCap :
String;
strSettingID :
String;
begin
WMI:=CreateOleObject('
WbemScripting.SWbemLocator');
wmiService :=
wmi.ConnectServer('
.', '
root\CIMV2');
nicstatus := wmiService.InstancesOf('
Win32_NetworkAdapterConfiguration');
p := nicstatus._NewEnum;
p.QueryInterface(IEnumVariant, Enum);
for cnt := 0
to nicstatus.Count - 1
do
begin
Enum.Next(1, card, F);
cardCap := Copy(card.Caption, 12, MaxInt);
if cardCap = FAdapter
then //Wenn Adapter in der jeweiligen Instanz gleich von mir definierter Adapter
begin
strSettingID := card.SettingID;
// statt card.SettingID müsste IPAddress stehen
result := (cardCap + '
: ' + strSettingID);
//hier der String mit der richtigen IP aus dem Array von IPAddress
break;
end
end;
end;