Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| procedure TfrmMain.actSystemScreensaverConfigureExecute(Sender: TObject); begin ShellExecute(Self.Handle, 'open', PChar(Self.RegAccess.ReadString(HKCU, 'Control Panel\Desktop', 'SCRNSAVE.EXE', '')), '/C', '', SW_SHOWNORMAL); end; |
Dieser Code sollte aus der Registry den aktuellen Bildschirmschoner holen und die Konfiguration ausführen.
Self.RegAccess.ReadString macht dasselbe wie TRegistry -> ReadString, nur dass ein Standardwert angegeben werden kann und man kein Registry-Objekt selbst benötigt:
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: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46:
| type TRegistryAccess = class private fReg: TRegistry; public constructor Create; destructor Destroy; override;
function ReadString(uRootKey: HKEY; uKeyPath, uKeyName, uDefault: String): String; end;
implementation
constructor TRegistryAccess.Create; begin Self.fReg := TRegistry.Create; end;
destructor TRegistryAccess.Destroy; begin Self.fReg.Free; inherited; end;
function TRegistryAccess.ReadString(uRootKey: HKEY; uKeyPath, uKeyName, uDefault: String): String; begin try Self.fReg.RootKey := uRootKey; if Self.fReg.OpenKey(uKeyPath, False) and Self.fReg.ValueExists(uKeyName) then Result := Self.fReg.ReadString(uKeyName) else Result := uDefault; finally Self.fReg.CloseKey; end; end; |
An dem Holen des Bildschirmschoners kann es allerdings eigentlich nicht liegen, denn schließlich wird der aktuelle Bildschirmschoner ja wie gesagt gestartet und "nur" nicht der Konfigurationsdialog aufgerufen.
Mit Groß- und Kleinschreibung muss ich es glatt nochmal versuchen, könnte durchaus sein, dass ich das vergessen habe, allerdings funkioniert es von der Kommandozeile zumindest unter 2000 mit beiden Varianten.