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!