Autor Beitrag
Dargor
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 59

Win2k SP4, WinXP Pro SP1
D6 Pers
BeitragVerfasst: Fr 31.01.03 18:36 
Wie kann ich DWORD-Werte (bzw. REG_DWORD-Werte) mit Hilfe von TRegistry auslesen und schreiben? Afaik ist DWORD ein Integer-Typ und müßte daher eingentlich mit ReadInteger zu lesen/WriteInteger zu schreiben sein.

Aber ich bekomme nur eine Exception:
Zitat:
Project Project1.exe raised an exception class ERegistryException with message 'Invalid data type for 'value''.
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 31.01.03 20:10 
Wirklich? Ist mir noch nie aufgefallen, und ich habe nun wirklich schon oft DWORDs gelesen und geschrieben. Bist du 100% sicher, dass der Fehler daran liegt?

Ansonsten, versuch´s mal mit "RegBinaryData" und gib als Puffer deine DWORD-Variable und ihre Größe an:
ausblenden Quelltext
1:
RegBinaryData('bla bla',dwWert,sizeof(DWORD));					


Yepp! Ich habe gerade mal in einem Programm nachgeschaut.
Ich benutze zwar Integer als Typ, aber die werden als DWORD in der Registry abgelegt.
Dargor Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 59

Win2k SP4, WinXP Pro SP1
D6 Pers
BeitragVerfasst: So 02.02.03 04:38 
Bin sogar ziemlich sicher ;)
Bin dabei ein kleines Proggy zu coden, mit dem man versteckte Optionen unter WinXP aktivieren kann, so z.B. unter
Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced den Wert EnableBalloonTips und der ist ein REG_DWORD
Ich werde es aber mal mit ReadBinaryData versuchen.
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 02.02.03 18:45 
Ich hoffe, du gestaltest dein Programm so, dass der User vorher wenigstens gefragt wird. ´s gibt einige WinXP-User, die genau diesen EnableBalloonTips-Wert mit XP-AntiSpy abgestellt haben. Die wären bestimmt nicht begeistert, wenn dein Programm das wieder einstellt. :twisted:

Wenn´s mit RegBinaryData nicht geht, dann benutze zum Einlesen (ReadInteger) doch mal eine Integer-Variable anstelle eines DWORD. Eins und Null bekommst du damit auch hin.
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 02.02.03 19:03 
Gerade ausprobiert mit Delphi 5:
ausblenden volle Höhe Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
uses
  Registry;

var
  reg    : TRegistry;
  dwTest : DWORD;

procedure TForm1.Button1Click(Sender: TObject);
begin
  reg := TRegistry.Create;
  with reg do try
    if(OpenKey('Software\Mathias\DWORD-Test',true)) then begin
      dwTest := 123;
      WriteInteger('Test',dwTest);

      CloseKey;
    end;
  finally
    Free;
  end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  reg := TRegistry.Create(KEY_READ);
  with reg do try
    if(OpenKey('Software\Mathias\DWORD-Test',false)) then begin
      dwTest := ReadInteger('Test');
      ShowMessage(inttostr(dwTest));

      CloseKey;
    end;
  finally
    Free;
  end;
end;

Null Fehler, Null Warnungen, keine Exceptions!

Ich dachte nämlich: vielleicht liegt es an der Option "bei Delphi-Exceptions stoppen"
(Tools/Debugger-Optionen/Sprach-Exceptions). Aber selbst als ich das eingeschaltet habe, kam kein Fehler. Also, irgendwas machst du falsch. :wink: