Entwickler-Ecke
Windows API - DWORD-Werte aus Registry lesen
Dargor - Fr 31.01.03 18:36
Titel: DWORD-Werte aus Registry lesen
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''. |
Delete - 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:
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 - 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.
Delete - 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.
Delete - So 02.02.03 19:03
Gerade ausprobiert mit Delphi 5:
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:
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!