AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Standardgateway Datentyp ??
Thema durchsuchen
Ansicht
Themen-Optionen

Standardgateway Datentyp ??

Ein Thema von kumar89 · begonnen am 28. Mai 2009 · letzter Beitrag vom 8. Jun 2009
Antwort Antwort
Seite 1 von 2  1 2      
kumar89
(Gast)

n/a Beiträge
 
#1

Standardgateway Datentyp ??

  Alt 28. Mai 2009, 10:42
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]
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Standardgateway Datentyp ??

  Alt 28. Mai 2009, 10:54
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
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
kumar89
(Gast)

n/a Beiträge
 
#3

Re: Standardgateway Datentyp ??

  Alt 28. Mai 2009, 10:59
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.


  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Standardgateway Datentyp ??

  Alt 28. Mai 2009, 11:17
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.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
kumar89
(Gast)

n/a Beiträge
 
#5

Re: Standardgateway Datentyp ??

  Alt 28. Mai 2009, 11:34
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
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#6

Re: Standardgateway Datentyp ??

  Alt 28. Mai 2009, 11:45
ich weiß, ich bin böße
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;
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: Standardgateway Datentyp ??

  Alt 28. Mai 2009, 13:20
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
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
kumar89
(Gast)

n/a Beiträge
 
#8

Re: Standardgateway Datentyp ??

  Alt 29. Mai 2009, 09:10
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
  Mit Zitat antworten Zitat
axellang

Registriert seit: 3. Mai 2003
Ort: München
138 Beiträge
 
Delphi XE2 Enterprise
 
#9

Re: Standardgateway Datentyp ??

  Alt 29. Mai 2009, 12:52
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
Alexander Lang
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#10

Re: Standardgateway Datentyp ??

  Alt 29. Mai 2009, 15:14
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.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 13:44 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