AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Registry und Typen

Ein Thema von MathiasSimmack · begonnen am 15. Jun 2004 · letzter Beitrag vom 16. Jun 2004
Antwort Antwort
MathiasSimmack
(Gast)

n/a Beiträge
 
#1

Registry und Typen

  Alt 15. Jun 2004, 21:12
Quasi das Gegenstück zu Registry und DWORDs -

Mit "GetValue" kann man einen Wert aus der Registry lesen, der als Objekt zurückgegeben und entsprechend gecastet werden muss. Bei Strings kein Problem:
Delphi-Quellcode:
reg := Registry.LocalMachine.OpenSubKey('Schlüsselname');
if(reg <> nil) then
try
  ListView1.Items.Add(string(reg.GetValue('Name des Wertes')));
finally
  reg.Close;
end;
Das Casten in andere Typen ist, IMHO, auch nicht das Problem. Aber wie kann ich ermitteln, welcher Typ vorliegt? Sprich: Ob der Wert ein String, ein DWord oder bspw. ein Binärwert ist?
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: Registry und Typen

  Alt 16. Jun 2004, 07:07
In der WinAPI gibt es die Funktion RegQueryInfoKey. Ich denke diese liefert die gewünschten Infos.
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#3

Re: Registry und Typen

  Alt 16. Jun 2004, 07:49
Das heißt mit anderen Worten: Ich muss die Win32-API-Funktion benutzen, weil .NET von sich aus nichts in der Art zur Verfügung stellt. Okay, ich wollte ohnehin mal ausprobieren, wie so was funktioniert.

Danke, Bernhard.
  Mit Zitat antworten Zitat
NicoDE
(Gast)

n/a Beiträge
 
#4

Re: Registry und Typen

  Alt 16. Jun 2004, 08:00
Zitat von MathiasSimmack:
Mit "GetValue" kann man einen Wert aus der Registry lesen, der als Objekt zurückgegeben und entsprechend gecastet werden muss.
Warum dann nicht GetType() benutzen (oder den is-Operator um 'kompatibel' zu bleiben) um den Typen zu ermitteln?
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#5

Re: Registry und Typen

  Alt 16. Jun 2004, 08:46
Es ist sogar noch einfacher. Ich habe ja vergessen, dass .NET durchaus auch Vorteile hat. Folgendes Beispiel löst mein Problem und zeigt zusätzlich auch noch den Typnamen (wenn auch im .NET-Format) an.
Delphi-Quellcode:
const
  szUninst = 'Software\Microsoft\Windows\CurrentVersion\Uninstall';

procedure TMainForm.LoadRegValues(const szName: string);
var
  reg : RegistryKey;
  vals : array of string;
  i : integer;
  li : ListViewItem;
  obj : TObject;
begin
  lv.BeginUpdate;
  lv.Items.Clear;

  // Schlüssel öffnen, ...
  reg := Registry.LocalMachine.OpenSubKey(szUninst + '\' + szName);
  if(reg <> nil) then
  try
    vals := reg.GetValueNames;
    if(length(vals) > 0) then
    begin
      for i := low(vals) to high(vals) do
      begin
        // Name, ...
        li := lv.Items.Add(vals[i]);
        obj := reg.GetValue(vals[i],nil);

        // ... & Typ, ...
        li.SubItems.Add(obj.GetType.ToString);

        // ... & Wert
        li.SubItems.Add(obj.ToString);
      end;

      SetLength(vals,0);
    end;
  finally
    reg.Close;
  end;

  lv.EndUpdate;
end;
Hintergedanke ist natürlich ein Programm, das die Liste der installierten Software in einem Tree-View anzeigt, und bei Auswahl eines Schlüssels (= Eintrag im TV) werden alle Einträge ermittelt und in einer List-View angezeigt.

Danke für die Denkanregung, Nico.
  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 02:04 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