Autor Beitrag
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 09.06.05 09:20 
Hallo!

Folgendes Problem: Ich möchte in einem Desktop-Tool auch Bildschirmschoner-Steuerung anbieten. Allerdings widersetzen sich die Windows-Bildschirmschoner vehement meinem "/c"-Parameter, d.h. es wird einfach nur der aktuelle Bildschirmschoner gestartet und der Parameter ignoriert.

Hat jemand ne Ahnung wie das geht bzw. ne API-Funktion, mit der man den Konfigurationsdialog aufrufen kann?

Danke schon mal
matze
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 4613
Erhaltene Danke: 24

XP home, prof
Delphi 2009 Prof,
BeitragVerfasst: Do 09.06.05 13:15 
poste doch mal den code, mit dem du den bildschirmschoner mit dem /c anufrufst !

_________________
In the beginning was the word.
And the word was content-type: text/plain.
arj
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 378

Win XP/Vista, Debian, (K)Ubuntu
Delphi 5 Prof, Delphi 7 Prof, C# (#Develop, VS 2005), Java (Eclipse), C++, QT, PHP, Python
BeitragVerfasst: Fr 10.06.05 12:48 
Schon mal anstatt /c /C versucht, oder -c bzw. -C?
Meines Wissens gibt es da unterschiede in den Windowsversionen und demzufolge auch in den Bildschirmschonern.

Moderiert von user profile iconraziel: Doppelposting entfernt.
jaenicke Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 14.06.05 09:22 
ausblenden 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);
//Das geht nicht. Warum steht in der Registry unter scrfile -> config nur "%1" ?
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:
ausblenden volle Höhe Delphi-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:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
type
  //Vereinfacht den Zugriff auf die Registry, wenn man sichergehen will, dass
  //kein Fehler kommt. Existiert ein Eintrag nicht, wird der mit übergebene
  //Standard-Wert zurückgegeben. - SJ
  TRegistryAccess = class
  private
    fReg: TRegistry;
  public
    constructor Create;
    destructor Destroy; override;

    function ReadString(uRootKey: HKEY;
      uKeyPath, uKeyName, uDefault: String): String;
  end;

implementation

{ TRegistryAccess }

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;
//Ausführung dauert bei 2 GHz ca. 17 Mikrosekunden, daher gegenüber baumartiger
//Durchsuchung der Registry eventuell besser geeignet.
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.