Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi SystemParametersInfo Problem (https://www.delphipraxis.net/78085-systemparametersinfo-problem.html)

sexmagic 28. Sep 2006 19:42


SystemParametersInfo Problem
 
Hallo Jungs,

ich habe mich nun im MSDN umgeshen und habe in der API Referenz SystemParameterInfo gefunden, da hab ich gleich mal bischen rumgetestet und bin auf ein Probelme gestossen.

Vorhaben:
Ich möchte mit einem Programm auf meinem Lappi den Screensaver und ddas EnegryManagement deaktivieren.

Mein Problem:
Ich kann alles deaktivieren, gemacht hab ichs so:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  SystemParametersInfo(SPI_SETPOWEROFFACTIVE,1,nil,0);
  SystemParametersInfo(SPI_SETPOWEROFFACTIVE, 1, nil,0);
  Label2.Font.Color := $002DB000;
  Label2.Caption := 'Enabled';
end;


procedure TForm1.Button2Click(Sender: TObject);
begin
  SystemParametersInfo(SPI_SETPOWEROFFACTIVE,0,nil,0);
  SystemParametersInfo(SPI_SETPOWEROFFACTIVE, 0, nil,0);
  Label2.Font.Color := $000000DD;
  Label2.Caption := 'Disabled';
end;
So schalte ich also während der Laufzeit ein und aus.
Laut API habe ich aber gedacht das wenn ich das Programm beende das ding deaktiviert bleibt, wenn ich aber deaktiviere und das Programm neu starte dann is der Status wieder aktiviert.
Habe ich das falsch verstanden und das setzt sich wieder auf True oder hab ich nen Fehler im Code?
Weiters habe ich das Problem das zwar der Dienst deaktiviert wurde aber im Windows unter Systemsteuerungen alles als normal angezeigt wird (aktiv), kann ich diese Anzeige nicht auch umstellen, damit das auch wirklich so angezeigt wird?

Überprüfen tu ich so:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var
  Value: Integer;
begin
  if SystemParametersInfo(SPI_GETSCREENSAVEACTIVE,0,@Value,0) then
    if Value <> 0 then
    begin
      Label2.Font.Color := $002DB000;
      Label2.Caption := 'Enabled';
    end;

  if SystemParametersInfo(SPI_GETSCREENSAVEACTIVE,0,@Value,0) then
    if Value = 0 then
    begin
      Label2.Font.Color := $000000DD;
      Label2.Caption := 'Disabled';
    end;
end;

Danke für die Hilfe oder Tips

;)

Sunlight7 28. Sep 2006 20:48

Re: SystemParametersInfo Problem
 
Hallo!

Ich nutzte die Funktion, um die Hintergrundbilder zu wechseln, aber da muß das Flag SPIF_UPDATEINIFILE im letztem Paramater hinein, probier das mal, ob das Dein Problem löst. :idea:

sexmagic 28. Sep 2006 21:52

Re: SystemParametersInfo Problem
 
Danke Sunlight, ich habe das getestet, funktioniert leider immernoch nicht richtig.

Wenn ich das Programm beende und neustarte ist der Screensaverdienst wieder Aktiviert obwohl ich nach dem Disablen beendet hab.

Auch hab ich versucht auf eine andere Art zu prüfen ob der Dienst aktiv is oder nicht.

Hat noch jemand ne andere Idee.

Flare 28. Sep 2006 22:03

Re: SystemParametersInfo Problem
 
Ist der Status wirklich erst wieder hergestellt (also der Screensaver an und Energy Management auch) wenn du dein Programm neu startest?
Dann müsste es ja an deinem Programm hängen.

Und mal ein bissl OT:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  SystemParametersInfo(SPI_SETPOWEROFFACTIVE,1,nil,0);
  SystemParametersInfo(SPI_SETPOWEROFFACTIVE, 1, nil,0);
  Label2.Font.Color := $002DB000;
  Label2.Caption := 'Enabled';
end;
Warum rufst du 2 mal (und zwar immer) die selbe Funktion mit den selben Parametern auf? Da müsste meines erachtens 2 mal das Selbe rauskommen oder verhält sich diese Funktion trotzdem gleicher Parameter 2 mal unterschiedlich?


Flare

sexmagic 28. Sep 2006 22:14

Re: SystemParametersInfo Problem
 
Och ich hab das wohl vergessen wieder zurückzusetzten, ich habe beim 2 Aufruf die Funktion für das Energymanagement drin. Is wohl beim testen falsch übernommen worden von mir.

Der Screensaver wird nciht erst beim neustarten wieder aktiviert, sobald ich mein Programm schliesse ist der wieder aktiviert. Ich dachte er bleibt so lange ausgeschalten bis ich den selbst manuel wieder aktiviere.

:(

EWeiss 28. Sep 2006 22:19

Re: SystemParametersInfo Problem
 
Zitat:

Zitat von sexmagic
Danke Sunlight, ich habe das getestet, funktioniert leider immernoch nicht richtig.

Wenn ich das Programm beende und neustarte ist der Screensaverdienst wieder Aktiviert obwohl ich nach dem Disablen beendet hab.

Auch hab ich versucht auf eine andere Art zu prüfen ob der Dienst aktiv is oder nicht.

Hat noch jemand ne andere Idee.

Bildschirmschoner deaktivieren:
SystemParametersInfo (SPI_SETSCREENSAVEACTIVE, 0, @NULL, SPIF_UPDATEINIFILE);
Bildschirmschoner aktivieren:
SystemParametersInfo (SPI_SETSCREENSAVEACTIVE, 1, @NULL, SPIF_UPDATEINIFILE);

Energie-Sparmodus deaktivieren
SystemParametersInfo(SPI_SETPOWEROFFACTIVE, 0, @NULL, SPIF_UPDATEINIFILE);
Energie-Sparmodus aktivieren
SystemParametersInfo(SPI_SETPOWEROFFACTIVE, 1, @NULL, SPIF_UPDATEINIFILE);

Das ist dein Zauberwort
SPIF_UPDATEINIFILE

Wenn das wirklich nicht funktioniert kannst du per Registry diesen DWORD-Schlüssel ändern
HKEY_CURRENT_USER\Control Panel\Desktop\ScreenSaveActive den DWord-wert auf '0' stellen.
Dann ist er garantiert aus.

EDIT:
Habs vergessen:
Sorge dafür das du den Pfad zur Screensaver SCRNSAVE.EXE auf "" setzt oder löschst.
Erst dann wird im Dialog der eintrag = (KEIN) gesetzt.
alles beim gleichen Schlüssel zu finden.

gruß

sexmagic 29. Sep 2006 16:12

Re: SystemParametersInfo Problem
 
Super vielen vielen Dank, ich habs über den Regschllüssel direkt gemacht.

Ist echt ne tolle Community, sehr nette Leute hier!

DANKE euch.

;)

OldGrumpy 30. Sep 2006 11:27

Re: SystemParametersInfo Problem
 
Neben SPIF_UPDATEINIFILE sollte auch noch SPIF_SENDCHANGE gesetzt werden, damit die Änderungen systemweit bekanntgemacht werden. In vielen Fällen werden die Settings nämlich einmal beim Systemstart gelesen und dann erst wieder auf so eine Benachrichtigung hin.

EWeiss 30. Sep 2006 11:29

Re: SystemParametersInfo Problem
 
Zitat:

Zitat von sexmagic
Super vielen vielen Dank, ich habs über den Regschllüssel direkt gemacht.

Ist echt ne tolle Community, sehr nette Leute hier!

DANKE euch.

;)

Jo kein Problem
Würd mich nur freuen mir würde auch mal jemand helfen :cry:

Gruß

sexmagic 30. Sep 2006 13:09

Re: SystemParametersInfo Problem
 
Hallo Jungs,

leider funktioniert diese Methode nicht wirklich oder ich habe Sie falsch angewendet.

Das jetzige Probelm ist das ..
Delphi-Quellcode:
SystemParametersInfo(SPI_SETPOWEROFFACTIVE, 1, @NULL, SPIF_UPDATEINIFILE);
.. nicht den Standbymodus des Monitors beinflusst.
Wozu dient das PowerOffActive dann?

Naja jedenfalls habe ich keine Möglichkeit gefunden um das über eine API Funktion zu lösen.

Ich hab nun versucht das über einen Timer und der Registry zu deaktivieren, leider finde ich den entsprechenden Wert nicht.

Also beim Programmstart soll der Zeitwert des Monitorstandy Modus ausgelesen werten, wenn die Checkbox zum deaktivieren "checked" ist soll über eine Procedure die die Maus um ein Pixel verschiebt alle "n" ausgeführt werden.

n := ausgelesener Monitor Standby Zeitwert aus der Registry.

Leider finde ich den Registrywert indem die Zeiteinstellung gemacht wurde für den Standbymodus nicht.

Hat jemand ne Ahnung wo der Wert des aktuell gewählten Profils zufinden ist.
Noch wichtiger wäre es ob die immer am selben Ort sind oder ob das beim PC und Laptop durch Energysparmodus wo anderes gespeichert wird.

Würde mich über einen Tip sehr freuen.

Danke


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:09 Uhr.
Seite 1 von 2  1 2      

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