![]() |
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] |
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: ![]() ![]() |
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.
;) |
Re: Standardgateway Datentyp ??
Naja, das Problem an deinem Quelltext ist ja nicht nur das Auslesen, das
![]() 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. |
Re: Standardgateway Datentyp ??
Zitat:
Danke |
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; |
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: ![]() |
Re: Standardgateway Datentyp ??
Zitat:
ich komm da net weiter kann daran liegen das ich erst im 1. ausbildungsjahr bin :) Gibts da keine andere Möglichkeit :-( Mfg |
Re: Standardgateway Datentyp ??
Hallo,
das mit WMI ist schon der richtige Weg. Unter ![]() Zitat:
Alexander |
Re: Standardgateway Datentyp ??
Oder du nimmst den Quelltext von oben, den man zugegebenermaßen ein klein wenig umbauen muss:
Delphi-Quellcode:
Magenta WMI sieht allerdings sehr interessant aus, also lohnt sich das sicherlich, sich das einmal anzuschauen.
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; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:00 Uhr. |
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