Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Registry DWORD schreiben (https://www.delphipraxis.net/151518-registry-dword-schreiben.html)

surfer007 20. Mai 2010 21:29


Registry DWORD schreiben
 
Hallo,

ich möchte das Arbeitsplatz Symbol auf dem Desktop ausblenden (W2K). Dazu muss ein DWORD in die Registry geschrieben werden. Das TRegistry Objekt hat aber leider nur WriteInteger. Beim Kompilieren erhalte ich den Hinweis "Konstantenausdruck verletzt untere Grenzen". Funktionieren tut meine EXE, jedoch erhalte ich manchmal eine Fehlermeldung "Fehler bei der Bereichsüberprüfung", obwohl die im Compiler deaktiviert ist. Meine Frage nun: Wie kann ich noch ein DWORD in die Registry schreiben?

Zitat:

Bei Windows 2000 ist hierfür ein Eingriff in die Registry nötig. Unter:
Code:
Hkey_Current_User\Software\Classes\CLSID\{20D04FE0-3AEA-1069-A2D8-8002B30309D}
muss ein neuer Unterschlüssel mit dem Namen "Shell-Folder" angelegt werden. In diesem neuen Schlüssel muss ein DWORD-Eintrag mit dem Namen "Attributes" erzeugt werden. Dieser Eintrag muss den hexadezimalen Wert "f0500174" bekommen. Nach aktualisieren des Desktops (mit "F5") ist das Arbeitsplatzsymbol verschwunden.
Hier mein Code:

Delphi-Quellcode:
  MyPrg := TRegistry.Create;
  MyPrg.Rootkey := HKEY_CURRENT_USER;
  MyPrg.LazyWrite := false;

  if cbShellFolder.Checked then begin
    try
      if MyPrg.Openkey('Software\Classes\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\ShellFolder', true) then begin
        try
          MyPrg.WriteInteger('Attributes', $f0500174);
        except
          Application.ProcessMessages;
        end;
        Application.ProcessMessages;
      end;
    finally
      MyPrg.CloseKey;
    end;
  end else begin
    try
      if MyPrg.Openkey('Software\Classes\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\ShellFolder', true) then begin
        MyPrg.DeleteValue('Attributes');
        Application.ProcessMessages;
      end;
    finally
      MyPrg.CloseKey;
    end;
  end;

  MyPrg.Free;
Grüsse,
Surfer

mkinzler 20. Mai 2010 21:34

Re: Registry DWORD schreiben
 
Ein Integer ist ein DWORD. Wo tritt den der Fehler auf?

Luckie 20. Mai 2010 21:50

Re: Registry DWORD schreiben
 
Zitat:

Zitat von mkinzler
Wo tritt den der Fehler auf?

Das wüsste man, wenn man anstatt im Fehlerfall die Nachrichtenschleife abzuarbeiten, sich die Exception Nachricht ausgeben lassen würde. ;)

surfer007 21. Mai 2010 12:56

Re: Registry DWORD schreiben
 
Zitat:

Ein Integer ist ein DWORD
Der Wert den ich schreiben muss ist $f0500174 = 4031775092 Dezimal
aber der Integer Bereich ist -2147483648..2147483647 (32 Bit mit Vorzeichen)
ich brauche also Cardinal (Longword) 0..4294967295 (32 Bit ohne Vorzeichen)

Das erklärt schonmal den Hinweis "Konstantenausdruck verletzt untere Grenzen" im Compiler.

himitsu 21. Mai 2010 13:05

Re: Registry DWORD schreiben
 
Das läßt sich schonmal leicht umgehen. (Integer und Cardinal sind ja gleich groß)
Delphi-Quellcode:
MyPrg.WriteInteger('Attributes', Integer($f0500174));

surfer007 21. Mai 2010 15:23

Re: Registry DWORD schreiben
 
Delphi-Quellcode:
MyPrg.WriteInteger('Attributes', Integer($f0500174));
ist die Lösung
:thumb:

oder
Delphi-Quellcode:
MyPrg.WriteInteger('Attributes', -263192204);


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:29 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