Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Standardgateway Datentyp ?? (https://www.delphipraxis.net/134755-standardgateway-datentyp.html)

kumar89 28. Mai 2009 09:42


Standardgateway Datentyp ??
 
Hallo,

nämlich programmier ich zur Zeit ein Programm was Systeminformationen ausliest aus der Registry.

Ich komm nämlich nicht mehr weiter nämlich will ich Standardgateway auslesen da kommt folgende Meldung:

Im Projekt Project.exe ist eine Exception der Klasse ERegistry/Exception mit der Meldung 'Ungültiger Datentyp für DhcpDefaultGateway aufgetreten. Als Registry Typ ist es REG_MULTI_SZ

Das hier wär mein folgender Quellcode:

Delphi-Quellcode:
begin                          //Standardgateway
  regist := TRegistry.Create;
  try
    regist.RootKey := HKEY_LOCAL_MACHINE;
    try
      regist.OpenKey('SYSTEM\ControlSet001\Services\{AB4895C2-45D6-4D85-ACA0-E5350C1B3E69}\Parameters\Tcpip', false);
      Edit8.Text := '' + regist.Readstring('DhcpDefaultGateway');
    except
      MessageDlg('Konnte nicht ausgelesen werden',mtError, [mbOk],0);
    end;
  finally
    regist.free;
  end;

Ich hab mal probiert andere Datentypen zu verwenden und bin net weiter gekommen.


Danke schon mal im voraus.


Mit freundlichen Grüßen



Kumar89

[edit=mkinzler]Delphi-Tag eingefügt Mfg, mkinzler[/edit]

jaenicke 28. Mai 2009 09:54

Re: Standardgateway Datentyp ??
 
Ich würde dir zum Auslesen dieser Informationen WMI empfehlen, das geht schnell und du hast die Informationen direkt lesbar da.
In deinem Fall wäre das Win32_NetworkAdapter und Win32_NetworkAdapterConfiguration:
http://msdn.microsoft.com/en-us/library/aa394216.aspx
http://msdn.microsoft.com/en-us/library/aa394217.aspx

kumar89 28. Mai 2009 09:59

Re: Standardgateway Datentyp ??
 
danke dir schon mal ich werds mir anschauen aber gern würde ich mein Problem oben gelöst bekommen. Da ich so jetzt angefangen habe. Aber wenns net geht werd ichs per wmi probieren.


;)

jaenicke 28. Mai 2009 10:17

Re: Standardgateway Datentyp ??
 
Naja, das Problem an deinem Quelltext ist ja nicht nur das Auslesen, das geht so, aber erstens klappt es so nur auf deinem PC (weil du eine feste GUID im Quelltext hast) und zweitens: Warum ControlSet001 statt dem aktuellen (CurrentControlSet).

Bei mir jedenfalls existiert der Eintrag nicht einmal, weil ich DHCP nicht aktiviert habe auf diesem PC und daher der Eintrag DefaultGateway heißt. ;-)

Dann noch ein Fehler: Du wirfst den Rückgabewert von OpenKey weg, wenn das Programm aber keine Adminrechte hat, wird es false zurückgeben, weil deine Methode dann nicht funktioniert.

kumar89 28. Mai 2009 10:34

Re: Standardgateway Datentyp ??
 
Zitat:

Zitat von jaenicke
Naja, das Problem an deinem Quelltext ist ja nicht nur das Auslesen, das geht so, aber erstens klappt es so nur auf deinem PC (weil du eine feste GUID im Quelltext hast) und zweitens: Warum ControlSet001 statt dem aktuellen (CurrentControlSet).

Bei mir jedenfalls existiert der Eintrag nicht einmal, weil ich DHCP nicht aktiviert habe auf diesem PC und daher der Eintrag DefaultGateway heißt. ;-)

Dann noch ein Fehler: Du wirfst den Rückgabewert von OpenKey weg, wenn das Programm aber keine Adminrechte hat, wird es false zurückgeben, weil deine Methode dann nicht funktioniert.

ok ist echt ärgerlich dann muss ich mir wmi aneignen kannst mir vllt dazu nen link schicken? ;)

Danke

himitsu 28. Mai 2009 10:45

Re: Standardgateway Datentyp ??
 
ich weiß, ich bin böße :twisted:
Delphi-Quellcode:
type TRegistryHack = class(TRegistry)
  protected
    //function GetData(const Name: string; Buffer: Pointer;
    //  BufSize: Integer; var RegData: TRegDataType): Integer;
  end;

var regist: TRegistry;
  s: String;
  t: TRegDataType;
  i: Integer;
begin
  regist := TRegistry.Create;
  try
    regist.RootKey := HKEY_LOCAL_MACHINE;
    try
      regist.OpenKey('SYSTEM\ControlSet001\Services\{27CFEF95-92F4-457F-9C13-90CD9E78FF36}\Parameters\Tcpip', false);
      SetLength(s, regist.GetDataSize('DhcpDefaultGateway'));
      TRegistryHack(regist).GetData('DhcpDefaultGateway', PChar(s), Length(s), t);
      //s := StringReplace(s, #0, #13#10, [rfReplaceAll]);
      for i := Length(s) downto 1 do
        if s[i] = #0 then begin
          s[i] := #10;
          Insert(#13, s, i);
        end;
      Memo1.Text := s;
    except
      MessageDlg('Konnte nicht ausgelesen werden',mtError, [mbOk],0);
    end;
  finally
    regist.free;
  end;
end;

jaenicke 28. Mai 2009 12:20

Re: Standardgateway Datentyp ??
 
Da muss man aber irgendwie den Registry-Zugriff auf nur lesen stellen, ich glaube das ging bei TRegistry auch irgendwie. Denn sonst klappt das nur mit Adminrechten.

Zum Auslesen von WMI würde ich diesen Quelltext empfehlen, der sauber geschrieben sein sollte:
http://www.delphi-forum.de/viewtopic...=551899#551899

kumar89 29. Mai 2009 08:10

Re: Standardgateway Datentyp ??
 
Zitat:

Zitat von jaenicke
Da muss man aber irgendwie den Registry-Zugriff auf nur lesen stellen, ich glaube das ging bei TRegistry auch irgendwie. Denn sonst klappt das nur mit Adminrechten.

Zum Auslesen von WMI würde ich diesen Quelltext empfehlen, der sauber geschrieben sein sollte:
http://www.delphi-forum.de/viewtopic...=551899#551899


ich komm da net weiter kann daran liegen das ich erst im 1. ausbildungsjahr bin :)

Gibts da keine andere Möglichkeit :-(

Mfg

axellang 29. Mai 2009 11:52

Re: Standardgateway Datentyp ??
 
Hallo,

das mit WMI ist schon der richtige Weg. Unter Magenta WMI kannst Du Dir die Kompos herunterladen. Es ist eine Demo mit bei, in der das auslesen und setzen eines neuen Gateways gezeigt wird.

Zitat:

ich komm da net weiter kann daran liegen das ich erst im 1. ausbildungsjahr bin
Es ist ziemlich easy und anhand der MegaDemo gut erklärt.

Alexander

jaenicke 29. Mai 2009 14:14

Re: Standardgateway Datentyp ??
 
Oder du nimmst den Quelltext von oben, den man zugegebenermaßen ein klein wenig umbauen muss:
Delphi-Quellcode:
uses
  WbemScripting_TLB, ActiveX;

function QueryWMI(const QueryClass, QueryProperty: String; AStrings: TStrings;
  AIsArray: Boolean = False): Boolean;
var
  Locator:    ISWbemLocator;
  Services:   ISWbemServices;
  ObjectSet:  ISWbemObjectSet;
  WMIObject:  ISWbemObject;
  WMIProperty: ISWbemProperty;
  Enum:       IEnumVariant;
  ObjValue:   Cardinal;
  TempObj:    OleVariant;
  i: Integer;
begin
  Result := FALSE;
  try
    Locator := CoSWbemLocator.Create;
    try
      Services := Locator.ConnectServer('', 'root\cimv2', '', '', '','', 0, NIL);
      if Assigned(Services) then begin
        Services.Security_.ImpersonationLevel := 3;
        ObjectSet := Services.ExecQuery('SELECT * FROM '+QueryClass,
                                        'WQL',
                                         wbemFlagForwardOnly or wbemFlagReturnWhenComplete,
                                         NIL);
        Enum := (ObjectSet._NewEnum) as IEnumVariant;
        while (Enum.Next(1, TempObj, ObjValue) = S_OK) do begin
          try
            WMIObject := IUnknown(TempObj) as ISWBemObject;
          except
            WMIObject := NIL;
          end;
          TempObj := Unassigned; // Interface in TempObj freigeben
          if Assigned(WMIObject) then begin
            WMIProperty := WMIObject.Properties_.Item(QueryProperty, 0);
            if (NOT VarIsNull(WMIProperty.Get_Value)) then
              if AIsArray then
                for i := VarArrayLowBound(WMIProperty.Get_Value, 1)
                  to VarArrayHighBound(WMIProperty.Get_Value, 1) do
                  AStrings.Add(Trim(WMIProperty.Get_Value[i]))
              else
                AStrings.Add(Trim(WMIProperty.Get_Value))
          end;
        end;
        Result := TRUE;
      end;
    finally
      Services := NIL;
      Locator := NIL;
    end;
  except // Exceptions fangen (Wenn WMI nicht verfügbar/installiert ist, gibt´s eine!)
    Result := FALSE;
  end;
end;

procedure TForm185.Button1Click(Sender: TObject);
begin
  QueryWMI('Win32_NetworkAdapterConfiguration', 'DefaultIPGateway', Memo1.Lines,
    True);
end;
Magenta WMI sieht allerdings sehr interessant aus, also lohnt sich das sicherlich, sich das einmal anzuschauen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:00 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz