AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Probleme aus HKEY_LOCAL_MACHINE Auszulesen
Thema durchsuchen
Ansicht
Themen-Optionen

Probleme aus HKEY_LOCAL_MACHINE Auszulesen

Ein Thema von dub89 · begonnen am 10. Okt 2011 · letzter Beitrag vom 12. Okt 2011
Antwort Antwort
dub89

Registriert seit: 5. Dez 2008
2 Beiträge
 
#1

Probleme aus HKEY_LOCAL_MACHINE Auszulesen

  Alt 10. Okt 2011, 14:11
Hallo,

ich habe eine Problem dabei, Daten aus der Registry auszulesen. Im folgenden Code lande ich nach der Zeile regist.OpenKey immer im Else Teil:
Code:
function TRegistryEditor.ReadStringLocalMachine(keyname: string) : string;
  var regist: TRegistry;
  var resultString: string;
  begin
    regist := TRegistry.Create;
    Try
      regist.RootKey := HKEY_LOCAL_MACHINE;
      if regist.OpenKey('SOFTWARE\XYZ\Info', False) then
      begin
        resultString := regist.ReadString(keyname);
      end
      else
      begin
        resultString := '';
      end;
    Finally
      regist.free;
    end;
    Result := resultString;
  end;
Ich hatte das Problem als ich aus HKEY_CURRENT_USER ausgelesen habe noch nicht. In beiden Fälle existiert der Registryschlüssel und die Werte, die ich auslesen möchte existieren auch. Es sind auch immer Strings, die eingetragen sind. Ersetze ich HKEY_LOCAL_MACHINE durch HKEY_CURRENT_USER funktioniert auch wieder alles.

Mit VBA und über die command line komme ich auch auf den Key drauf. Die Probleme existieren sowohl unter WinXP als auch unter Win7 und ich nutze Delphi 2006.

Weiß jemand wo das Problem liegt?

Viele Grüße

Johannes
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Probleme aus HKEY_LOCAL_MACHINE Auszulesen

  Alt 10. Okt 2011, 14:13
Versuch mal
regist := TRegistry.Create(KEY_READ); [edit] Achja, ein CloseKey fehlt da auch noch. Mal im Ganzen:
Delphi-Quellcode:
function TRegistryEditor.ReadStringLocalMachine(keyname: string): string;
var
  regist: TRegistry;
begin
  regist := TRegistry.Create(KEY_READ);
  Try
    regist.RootKey := HKEY_LOCAL_MACHINE;
    if regist.OpenKey('SOFTWARE\XYZ\Info', False) then
      try
        Result := regist.ReadString(keyname);
      finally
        regist.CloseKey;
      end
  Finally
    regist.free;
  end;
end;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen

Geändert von DeddyH (10. Okt 2011 um 14:17 Uhr)
  Mit Zitat antworten Zitat
dub89

Registriert seit: 5. Dez 2008
2 Beiträge
 
#3

AW: Probleme aus HKEY_LOCAL_MACHINE Auszulesen

  Alt 10. Okt 2011, 14:28
Vielen Dank es hat so funktioniert!
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Probleme aus HKEY_LOCAL_MACHINE Auszulesen

  Alt 10. Okt 2011, 14:34
Gern geschehen. Kurz noch zur Erläuterung:
Zitat:
Mit Create wird ein TRegistry-Objekt instantiiert. Dabei erhält die Eigenschaft RootKey den Wert HKEY_CURRENT_USER und die Eigenschaft LazyWrite den Wert true. Wenn der Parameter AAccess übergeben wird, wird dessen Wert für die Initialisierung der Eigenschaft Access verwendet. Ansonsten wird Access mit KEY_ALL_ACCESS initialsiert.
Zitat:
KEY_ALL_ACCESS
Kombination von KEY_READ, KEY_WRITE und KEY_CREATE_LINK.
Als Normaluser hast Du aber im zu untersuchenden Zweig keine Schreibrechte, deshalb schlug Deine Variante fehl.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#5

AW: Probleme aus HKEY_LOCAL_MACHINE Auszulesen

  Alt 12. Okt 2011, 12:50
wie wäre es denn mit dieser Version:

Delphi-Quellcode:
begin
  regist := TRegistry.Create;
  Try
    regist.RootKey := HKEY_LOCAL_MACHINE;
    if regist.OpenKeyReadOnly('SOFTWARE\XYZ\Info') then
Hab ich da bisher (Lese-)Glück gehabt?

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Probleme aus HKEY_LOCAL_MACHINE Auszulesen

  Alt 12. Okt 2011, 12:51
Zitat:
Anmerkung: Nach einem erfolgreichen Aufruf von OpenKeyReadOnly wird die Eigenschaft Access der Registrierungskomponente automatisch auf KEY_READ gesetzt. Dabei spielt es keine Rolle, welchen Wert diese Eigenschaft vor dem Aufruf der Methode hatte.
Ist also im Prinzip auch nichts anderes, nur später.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Antwort Antwort


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 12:17 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