![]() |
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:
So schalte ich also während der Laufzeit ein und aus.
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; 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 ;) |
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: |
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. |
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:
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?
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; Flare |
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. :( |
Re: SystemParametersInfo Problem
Zitat:
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ß |
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. ;) |
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.
|
Re: SystemParametersInfo Problem
Zitat:
Würd mich nur freuen mir würde auch mal jemand helfen :cry: Gruß |
Re: SystemParametersInfo Problem
Hallo Jungs,
leider funktioniert diese Methode nicht wirklich oder ich habe Sie falsch angewendet. Das jetzige Probelm ist das ..
Delphi-Quellcode:
.. nicht den Standbymodus des Monitors beinflusst.
SystemParametersInfo(SPI_SETPOWEROFFACTIVE, 1, @NULL, SPIF_UPDATEINIFILE);
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 18:43 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz