Einzelnen Beitrag anzeigen

T.E.

Registriert seit: 27. Mai 2007
Ort: Hamburg
284 Beiträge
 
Delphi XE2 Enterprise
 
#1

Bildschirmschoner soll PC herunterfahren

  Alt 10. Feb 2009, 13:02
Hallo Leute!

Ich habe ein Problem und zwar bin ich von einem Arbeitskreis unserer Schule gefragt worden ob ich einen Bildschirmschoner erstellen könnte, der den PC herunterfahren kann.
Soweit so gut die Funktionen für das herunterfahren etc weiß ich auch und ich habe den Bildschirmschoner auch erstellt, allerdings wird der PC nicht nach der vorgegebenen Zeit heruntergefahren; genauer: er wird gar nicht heruntergefahren wenn er als Logon Screensaver installiert ist.
Als normaler Screensaver wird der PC nach der eingestellten Zeit heruntergefahren.

Ich habe schon folgende Möglichkeiten ausprobiert gehabt:
  • Auslesen der Zeit aus der Registry
  • Auslesen der Zeit aus einer ini
  • Vorgabe der Zeit im Quellcode
Alles drei gab nicht das gewünschte Ergebniss.
Kann mir da vllt jemand sagen, wo der Fehler liegt?

Quellcode des eigentlichen Screensavers
Delphi-Quellcode:
procedure TSaverForm.FormShow(Sender: TObject);
begin
inc(n);
if n=1 then
begin
SendMessage(Application.Handle,
           WM_SYSCOMMAND, SC_MONITORPOWER, 1);
end;
  st := time;
end;

procedure TSaverForm.Timer1Timer(Sender: TObject);
var
  Ini : TIniFile;
  h, m, s, ms: word;
  timerh, timerm : string;
  Registry: TRegistry;
begin
{
  try
    Ini:=TIniFile.Create(GetProgramPath + '\Umwelt Schoner\settings.ini');
    shutdown    := Ini.ReadInteger('POWERSTAT','SHUTDOWN',0);
    ruhezustand := Ini.ReadInteger('POWERSTAT','RUHEZUSTAND',0);
    standby    := Ini.ReadInteger('POWERSTAT','STANDBY',0);
    timerh      := Ini.ReadString('Settings','Timerh','Wert');
    timerm      := Ini.ReadString('Settings','Timerm','Wert');
  finally
    Ini.Free;
  end; }


  with TRegistry.Create do
  begin
    try
      Rootkey:=HKEY_LOCAL_MACHINE;
      if OpenKey('Software\E.T.-IT Solutions\Umwelt-Schoner\Screen Saver.UmweltSchoner',True) then
      begin
          timerh:=ReadString('Timerh');
          timerm:=ReadString('Timerm');
          shutdown:=ReadInteger('Shutdown');
          ruhezustand:=ReadInteger('Ruhezustand');
          standby:=ReadInteger('StandBy');
      end;
    finally
      Free;
    end;
  end;

  Timer := timerh + ':' + timerm + ':00';
  
  ct := time;
  DecodeTime(ct-st, h, m, s, ms);
  at := TimeToStr(EncodeTime(h,m,s,ms));

if at = timer then
begin
  //Herunterfahren
  if shutdown = 1 then begin
  ExWindows(EWX_Shutdown OR EWX_FORCEIFHUNG OR EWX_Poweroff);
  end;
  //Ruhezustand
  if ruhezustand = 1 then begin
  ShellExecute(Application.Handle, 'open', 'rundll32.exe',
               'powrprof.dll,SetSuspendState', nil, SW_SHOWNORMAL);
  application.Terminate;
  end;
  //Stand-By
  if standby = 1 then begin
  end;
end;
end;
Schon mal vielen Dank!
Gruß Torben
  Mit Zitat antworten Zitat