AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Anzeigen der IPAdresse UND Name der Verbindung
Thema durchsuchen
Ansicht
Themen-Optionen

Anzeigen der IPAdresse UND Name der Verbindung

Ein Thema von SaltJohn · begonnen am 17. Jun 2008 · letzter Beitrag vom 19. Jun 2008
Antwort Antwort
Seite 2 von 3     12 3      
soulies

Registriert seit: 9. Dez 2005
234 Beiträge
 
#11

Re: Anzeigen der IPAdresse UND Name der Verbindung

  Alt 18. Jun 2008, 11:54
hoi,

'IpAddress' selbst ist ne Liste mit den entsprechenden Elementen.

Du müsstest also die Liste durchlaufen und dann jedes Element deiner Rückgabe-Liste hinzufügen.
(Ich glaub so ists richtig)


cya
  Mit Zitat antworten Zitat
SaltJohn

Registriert seit: 9. Jun 2008
43 Beiträge
 
#12

Re: Anzeigen der IPAdresse UND Name der Verbindung

  Alt 18. Jun 2008, 13:22
Verstehe dich leider nicht ganz. Wie mache ich das mit der Liste durchlaufen? Verstehe auch nicht warum das eine Liste sein soll da es ja nur eine IP gibt und diese in der WMI Demo auch nur in einer Zeile aufgeführt ist eben genauso wie bei den Adapternamen usw.
  Mit Zitat antworten Zitat
soulies

Registriert seit: 9. Dez 2005
234 Beiträge
 
#13

Re: Anzeigen der IPAdresse UND Name der Verbindung

  Alt 18. Jun 2008, 13:26
ein Adapter kann mehrere IpAdressen haben - alle IpAdressen werden in einer Liste gehalten, nicht in einem einzigen string

möglichkeit:
Delphi-Quellcode:
  if (WMI_VALUE='Name') then
    begin
      if not VarIsNull(l_WMIProperty.Get_Value) then
         result.Add(l_WMIProperty.Get_Value) else result.Add('<unbekannt>');
    end
  else // die IpAdressen
    begin
      if not VarIsNull(l_WMIProperty.Get_Value) then
        begin
          for i:=0 to VarArrayDimCount(l_WMIProperty.Get_Value) do // VarArrayDimCount müsste die Länge der Liste sein
             result.Add(l_WMIProperty.Get_Value[i]);
        end;
    end;
cya
  Mit Zitat antworten Zitat
SaltJohn

Registriert seit: 9. Jun 2008
43 Beiträge
 
#14

Re: Anzeigen der IPAdresse UND Name der Verbindung

  Alt 18. Jun 2008, 15:37
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;
  Mit Zitat antworten Zitat
soulies

Registriert seit: 9. Dez 2005
234 Beiträge
 
#15

Re: Anzeigen der IPAdresse UND Name der Verbindung

  Alt 18. Jun 2008, 16:25
hoi,

Delphi-Quellcode:
function getWMIValue(WMI_CLASS:string;WMI_VALUE:string;Adapter:string): string;
var
   l_WMILocator: ISWbemLocator;
   l_WMIServices: ISWbemServices;
   l_WMIObjectDefinition: ISWbemObject;
   l_WMIObjectSet: SWbemObjectSet;
   l_WMIObjectInstances: IEnumVariant;
   l_WMIObject: ISWbemObject;
   l_WMIPropertySet: ISWbemPropertySet;
   l_WMIProperty: ISWbemProperty;
   l_TempObj: OleVariant;
   l_ObjValue: Cardinal;
   i : integer ;
begin
   Result := '' ;
   l_WMILocator := CoSWbemLocator.Create;
   l_WMIServices := L_WMILocator.ConnectServer('.', 'root\CIMV2', '', '', '', '', 0, nil);
   l_WMIObjectDefinition := l_WMIServices.Get(WMI_CLASS, wbemFlagUseAmendedQualifiers, nil);
   l_WMIObjectSet:= l_WMIServices.execquery('Select * from '+wmiClass+' where caption like '+#39+#37+Adapter+#39,'WQL',0,nil);
   l_WMIObjectInstances := (l_WMIObjectSet._NewEnum) as IEnumVariant;
       
   while (l_WMIObjectInstances.Next(1, l_TempObj, l_ObjValue) = S_OK) do
   begin
      l_WMIObject:= IUnknown(l_TempObj) as SWBemObject;
      l_WMIPropertySet := l_WMIObject.Properties_;
      l_WMIProperty := l_WMIPropertySet.Item(WMI_VALUE, 0);

      if not VarIsNull(l_WMIProperty.Get_Value) then
        begin
          for i:=0 to VarArrayDimCount(l_WMIProperty.Get_Value) do
             result := result + l_WMIProperty.Get_Value[i] + ' ; ' ;
        end;
   end;
end;
und denn deine funktion

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
          result := getWMIValue('Win32_NetworkAdapterConfiguration','IPAddress',FAdapter);
          break;
        end
   end;
   
end;

auf die schnelle zusammen gebastelt ...

cya
  Mit Zitat antworten Zitat
SaltJohn

Registriert seit: 9. Jun 2008
43 Beiträge
 
#16

Re: Anzeigen der IPAdresse UND Name der Verbindung

  Alt 18. Jun 2008, 17:58
Hi soulies,

zunächst einmal DANKE!

hätte nicht gedacht dass ich für die IP noch so eine große Funktion benötige

Bisher lief mein Programm ohne zusätzliche Units wie WbemScripting_TLB welche ich nun eingebunden habe. Was muss denn noch eingebunden werden damit die Funktion läuft? Er bringt mir nämlich

Zitat:
[Pascal Fehler] : E2003 Undefinierter Bezeichner: 'wmiClass'
im Abschnnitt
l_WMIObjectSet:= l_WMIServices.execquery('Select * from '+wmiClass+' where caption like '+#39+#37+Adapter+#39,'WQL',0,nil); oder muss ich "wmiClass" noch deklarieren?
  Mit Zitat antworten Zitat
Alter Mann

Registriert seit: 15. Nov 2003
Ort: Berlin
947 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#17

Re: Anzeigen der IPAdresse UND Name der Verbindung

  Alt 18. Jun 2008, 20:03
Hi SaltJohn,

'wmiClass' sollte WMI_CLASS heißen, so wie in der Funktionsdeklaration:
function getWMIValue(WMI_CLASS:string;WMI_VALUE:string;Adapter:string): string; Gruß
  Mit Zitat antworten Zitat
SaltJohn

Registriert seit: 9. Jun 2008
43 Beiträge
 
#18

Re: Anzeigen der IPAdresse UND Name der Verbindung

  Alt 18. Jun 2008, 21:40
Hallo Alter Mann, das wars vielen Dank für den Hinweis!

Das Programm läuft jetzt aber nur solange bis ich die Funktion aufrufe. Dann bricht er in der Zeile result := result + l_WMIProperty.Get_Value[i] + ' ; ' ; ab

mit der Meldung:
Zitat:
Erste Gelegenheit für Exception bei $7C812A5B. Exception-Klasse EVariantBadIndexError mit Meldung 'Variant or safe array index out of bounds'. Prozess Project1.exe (368)
  Mit Zitat antworten Zitat
soulies

Registriert seit: 9. Dez 2005
234 Beiträge
 
#19

Re: Anzeigen der IPAdresse UND Name der Verbindung

  Alt 19. Jun 2008, 07:19
hi,

ich hab eben mal den code durchlaufen lassen - und bei mir hängt er sich net auf.
Rückgabe der IPAdressen war OK.

hab allerdings Fadapter/Adapter direkt eingetragen, da ich die variable net habe.

Frage:
cardCap := Copy(card.Caption, 12, MaxInt); die zeichen davor, die du net mitkopierst entsprechen die : '[000000xx]' ?

Was passiert wenn Du testweise auch den Adapter direkt einträgst ?

cya
  Mit Zitat antworten Zitat
SaltJohn

Registriert seit: 9. Jun 2008
43 Beiträge
 
#20

Re: Anzeigen der IPAdresse UND Name der Verbindung

  Alt 19. Jun 2008, 08:57
Moin soulies!

Zitat von soulies:

Frage:
cardCap := Copy(card.Caption, 12, MaxInt); die zeichen davor, die du net mitkopierst entsprechen die : '[000000xx]' ?
Ja, das ist korrekt. Wusste mir nicht anders zu helfen

Habe es jetzt auch zum laufen bekommen. War wohl ein klassischer "off-by-one-error" bei mir.

mit...

Delphi-Quellcode:
if not VarIsNull(l_WMIProperty.Get_Value) then
        begin
          for i:=0 to VarArrayDimCount(l_WMIProperty.Get_Value)-1 do
             result := result + l_WMIProperty.Get_Value[i] + ' ; ' ;
        end;
hat es dann funktioniert. Super


Was mir allerdings keine Ruhe läßt... Mich würde noch interessieren ob es nicht doch möglich ist die IPAdresse ohne "WbemScripting_TLB" einzubinden. Ich meine ich kann ja auf die Instanz zugreifen nur eben nicht auf den String.

Edit: Leider zu früh gefreut... habe ich eben bemerkt dass es unter win2000 Probleme gibt. Es kommt die Fehlermeldung "Die Anfrage ist ungültig". Komisch... Die Klassen Caption und IPAddress sind in der WMI von Win2000 vorhanden.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:20 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz