AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Bildschirmschoner soll PC herunterfahren
Thema durchsuchen
Ansicht
Themen-Optionen

Bildschirmschoner soll PC herunterfahren

Ein Thema von T.E. · begonnen am 10. Feb 2009 · letzter Beitrag vom 11. Feb 2009
Antwort Antwort
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
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#2

Re: Bildschirmschoner soll PC herunterfahren

  Alt 10. Feb 2009, 13:20
könnte sein, daß da irgendwas nicht die nötigen Rechte hat, irgendwas in dieser Richtung zu machen.


du könntest di ja mal in einer LogFile, oder da das SS eh auf'm Bildschirm dargestellt wird z.B. in einem Memo, den aktuellen Status ausgeben lassen.

also
Zitat:
{uhrzeit}: programm gestartet
{uhrzeit}: Timeoutwert ausgelesen und dieser ist {zeit}
{uhrzeit}: ShutDown wir eingelaitet
{uhrzeit}: powrprof.dll wurde ausgeführt und der Rückgabewert war {wert}
...
$2B or not $2B
  Mit Zitat antworten Zitat
Zoot

Registriert seit: 30. Jan 2006
Ort: Hessen
113 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: Bildschirmschoner soll PC herunterfahren

  Alt 10. Feb 2009, 13:41
Warum packst du so viel Code in den Timer?

Du kannst dir doch beim Start die aktuelle Uhrzeit merken, die Inidatei/Registry auslesen und die Uhrzeit ausrechnen, wann der Rechner runterfahren soll.

Im Timer fragst du nur noch ab, ob die aktuelle Zeit >= als die Runterfahrzeit ist.
Wozu du jeweils die Zeiten in Strings wandelst, ist mir auch nicht klar.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Bildschirmschoner soll PC herunterfahren

  Alt 10. Feb 2009, 13:48
Wie sieht ExWindows aus?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
T.E.

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

Re: Bildschirmschoner soll PC herunterfahren

  Alt 10. Feb 2009, 14:12
Okay schon mal vielen dank für die Hinweise...
werde mal versuchen die umzusetzen.

Soviel Code ist gut wenn der Bildschirm ausgeschaltet wird und der PC heruntergefahren wird.


@ Luckie: Was ist mit ExWindows....???
Gruß Torben
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#6

Re: Bildschirmschoner soll PC herunterfahren

  Alt 10. Feb 2009, 14:51
Zitat von T.E.:
@ Luckie: Was ist mit ExWindows....???
Warscheinlich meint er: "Wie sieht ExWindows aus?" und möchte wissen was die Funktion macht bzw. wo sie herkommt bzw. ob du den Quellcode posten würdest, damit man dir besser helfen kann

MfG,
Bug
Intellekt ist das Verstehen von Wissen. Verstehen ist der wahre Pfad zu Einsicht. Einsicht ist der Schlüssel zu allem.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Bildschirmschoner soll PC herunterfahren

  Alt 10. Feb 2009, 18:13
Posting korririgiert. Jetzt sollte es verständlich sein.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
T.E.

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

Re: Bildschirmschoner soll PC herunterfahren

  Alt 11. Feb 2009, 13:11
Achso.... okay gut...!
Die Funktion ExWindows sieht bei mir folgendermaßen aus:
Delphi-Quellcode:
function ExWindows(const AFlag: Word): Boolean;
var
  vi : TOSVersionInfo;
  hToken : THandle;
  tp : TTokenPrivileges;
  h : DWord;
begin
  result:= false;

  vi.dwOSVersionInfoSize:=SizeOf(vi);

  if GetVersionEx(vi) then
  begin
    if vi.dwPlatformId = VER_PLATFORM_WIN32_NT then
    begin
      // Windows NT
      if OpenProcessToken(GetCurrentProcess,TOKEN_ADJUST_PRIVILEGES,hToken) then
      begin
        LookupPrivilegeValue(nil,'SeShutdownPrivilege',tp.Privileges[0].Luid);
        tp.PrivilegeCount := 1;
        tp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
        h := 0;
        AdjustTokenPrivileges(hToken,False,tp,0,PTokenPrivileges(nil)^, h);
        CloseHandle(hToken);
        result := ExitWindowsEx(Aflag, 0);
      end;
    end
    else
    begin // Windows 95
      Result := ExitWindowsEx(Aflag, 0);
    end;
  end;
end;
als Angemeldeter Benutzer funktioniert das auch aber wie gesagt wenn keiner angemeldt ist nicht.
Gruß Torben
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#9

Re: Bildschirmschoner soll PC herunterfahren

  Alt 11. Feb 2009, 14:22
Hat der Dienst eventuell das Privileg "SeShutdownPrivilege" nicht? Schreib mal eine Logdatei und guck, ob die Funktion korrekt ausgeführt wird.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Antwort Antwort


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 16:43 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