Einzelnen Beitrag anzeigen

SaltJohn

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

Re: Anzeigen der IPAdresse UND Name der Verbindung

  Alt 18. Jun 2008, 11:06
Also ich hab mich jetzt mal ein wenig schlau gemacht und eine Methode gefunden über WMI die Adapterbezeichnug und auch die IP Adresse auszulesen. Allerdings habe ich noch ein Problem mit der Augabe der IPs. Wenn ich in meinem Testprogramm auf IP ausgeben klicke kommt die Fehlermeldung:
Zitat:
Exception-Klasse EVariantTypeCastError mit Meldung 'Variante des Typs (Array Variant) konnte nicht in Typ (String) konvertiert werden'
. Demnach wird die IP-Adresse einer Instanz wohl nicht als String ausgegeben? Kann es sein dass diese als Hexadezimalzahl oder Binärzahl ausgelesen wird? beim Aufruf der Adapternamen geht es.

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, WbemScripting_TLB, ActiveX, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  var
  l_Values: TStringList;
implementation

{$R *.dfm}
function getWMIValue(WMI_CLASS:string;WMI_VALUE:string): TStringList;
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;
     
begin
   result := TStringList.Create;

 
   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_WMIObjectDefinition.Instances_(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
        result.Add(l_WMIProperty.Get_Value) else result.Add('<unbekannt>');
   end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var x:integer;
begin
l_Values := getWMIValue('Win32_NetworkAdapterConfiguration','IPAddress');
for x:=0 to l_Values.Count-1 do begin
  ShowMessage(l_Values.Strings[x]);
end;
end;

procedure TForm1.Button2Click(Sender: TObject);
var x:integer;
begin
l_Values := getWMIValue('Win32_NetworkAdapter','Name');
for x:=0 to l_Values.Count-1 do begin
  ShowMessage(l_Values.Strings[x]);
end;
end;

end.
Angehängte Dateien
Dateityp: exe project1_749.exe (436,0 KB, 38x aufgerufen)
  Mit Zitat antworten Zitat