AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

SystemParametersInfo Problem

Ein Thema von sexmagic · begonnen am 28. Sep 2006 · letzter Beitrag vom 30. Sep 2006
Antwort Antwort
Seite 1 von 2  1 2      
sexmagic

Registriert seit: 16. Sep 2006
56 Beiträge
 
Delphi 2006 Professional
 
#1

SystemParametersInfo Problem

  Alt 28. Sep 2006, 20:42
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

  Mit Zitat antworten Zitat
Benutzerbild von Sunlight7
Sunlight7

Registriert seit: 17. Sep 2006
Ort: Sonnensystem, Zentral
1.522 Beiträge
 
Delphi 5 Standard
 
#2

Re: SystemParametersInfo Problem

  Alt 28. Sep 2006, 21:48
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.
Windows: Ja - Microsoft: Nein -> www.ReactOS.org
  Mit Zitat antworten Zitat
sexmagic

Registriert seit: 16. Sep 2006
56 Beiträge
 
Delphi 2006 Professional
 
#3

Re: SystemParametersInfo Problem

  Alt 28. Sep 2006, 22:52
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.
  Mit Zitat antworten Zitat
Flare

Registriert seit: 26. Jan 2006
Ort: Leipzig
529 Beiträge
 
Delphi 7 Professional
 
#4

Re: SystemParametersInfo Problem

  Alt 28. Sep 2006, 23:03
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
Willy Scheibel
  Mit Zitat antworten Zitat
sexmagic

Registriert seit: 16. Sep 2006
56 Beiträge
 
Delphi 2006 Professional
 
#5

Re: SystemParametersInfo Problem

  Alt 28. Sep 2006, 23:14
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.

  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#6

Re: SystemParametersInfo Problem

  Alt 28. Sep 2006, 23:19
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ß
  Mit Zitat antworten Zitat
sexmagic

Registriert seit: 16. Sep 2006
56 Beiträge
 
Delphi 2006 Professional
 
#7

Re: SystemParametersInfo Problem

  Alt 29. Sep 2006, 17:12
Super vielen vielen Dank, ich habs über den Regschllüssel direkt gemacht.

Ist echt ne tolle Community, sehr nette Leute hier!

DANKE euch.

  Mit Zitat antworten Zitat
Benutzerbild von OldGrumpy
OldGrumpy

Registriert seit: 28. Sep 2006
Ort: Sandhausen
941 Beiträge
 
Delphi 2006 Professional
 
#8

Re: SystemParametersInfo Problem

  Alt 30. Sep 2006, 12:27
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.
"Tja ja, das Ausrufezeichen... Der virtuelle Spoiler des 21. Jahrhunderts, der Breitreifen für die Datenautobahn, die k3wle Sonnenbrille fürs Usenet. " (Henning Richter)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#9

Re: SystemParametersInfo Problem

  Alt 30. Sep 2006, 12:29
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

Gruß
  Mit Zitat antworten Zitat
sexmagic

Registriert seit: 16. Sep 2006
56 Beiträge
 
Delphi 2006 Professional
 
#10

Re: SystemParametersInfo Problem

  Alt 30. Sep 2006, 14:09
Hallo Jungs,

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

Das jetzige Probelm ist das ..
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
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:59 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