Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Rechner Herunterfahren geht nicht (https://www.delphipraxis.net/176128-rechner-herunterfahren-geht-nicht.html)

franktron 14. Aug 2013 10:57

Rechner Herunterfahren geht nicht
 
Meine Programm soll den PC Runterfahren, tut es aber nicht es beendet sich zwar aber der PC bleibt an.

Hier der Code
http://www.delphipraxis.net/29-abmel...-98-me-nt.html

Delphi-Quellcode:
if Buffer='SHUTDOWN' then
  Begin
    ExitWin(EWX_SHUTDOWN);
    Close;
  End;

Helmi 14. Aug 2013 12:07

AW: Rechner Herunterfahren geht nicht
 
Hallo,

ich nutz folgenden Code um runterzufahren, etc., und das ohne Probleme.

Delphi-Quellcode:
function ExitWindows(RebootParam: Longword): Boolean;
//mögliche RebootParam:
//EWX_SHUTDOWN or EWX_FORCE = shutdown
//EWX_REBOOT or EWX_FORCE  = reboot
//EWX_LOGOFF or EWX_FORCE  = logoff
//
//EWX_FORCE - Die aktiven Prozesse werden zwangsweise und ohne Rückfrage beendet.

var
  TTokenHd             : THandle;
  TTokenPvg            : TTokenPrivileges;
  cbtpPrevious         : DWORD;
  rTTokenPvg           : TTokenPrivileges;
  pcbtpPreviousRequired : DWORD;
  tpResult             : Boolean;

const
  SE_SHUTDOWN_NAME = 'SeShutdownPrivilege';

begin
  If Win32Platform = VER_PLATFORM_WIN32_NT then
    begin
      tpResult := OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES or
                                    TOKEN_QUERY, TTokenHd);

      If tpResult then
        begin
          tpResult := LookupPrivilegeValue(nil, SE_SHUTDOWN_NAME, TTokenPvg.Privileges[0].Luid);

          TTokenPvg.PrivilegeCount           := 1;
          TTokenPvg.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
          cbtpPrevious                       := SizeOf(rTTokenPvg);
          pcbtpPreviousRequired              := 0;

          If tpResult then
            AdjustTokenPrivileges(TTokenHd, false, TTokenPvg, cbtpPrevious,
                                  rTTokenPvg, pcbtpPreviousRequired);
        end;
    end;

  Result := ExitWindowsEx(RebootParam, 0);
end;
Aufruf:
Delphi-Quellcode:
  //Benutzer abmelden
  ExitWindows(EWX_LOGOFF or EWX_FORCE)

  //Windows neu starten
  ExitWindows(EWX_REBOOT or EWX_FORCE)

  //Windows herunterfahren
  ExitWindows(EWX_SHUTDOWN or EWX_FORCE)

franktron 14. Aug 2013 12:17

AW: Rechner Herunterfahren geht nicht
 
Danke jetzt gehts Force musste noch dazu

jaenicke 14. Aug 2013 13:10

AW: Rechner Herunterfahren geht nicht
 
Wobei Force zu Datenverlust führen kann, siehe Doku... Denn da wird WM_QUERYENDSESSION nicht aufgerufen und Programme ggf. abgeschossen.

arnof 14. Aug 2013 13:25

AW: Rechner Herunterfahren geht nicht
 
Seit WIN7 gibt es immer mal Situationen, das manche sich manche Programme einfach nicht beenden wollen, ich habe deshalb die Lösungen:

Ich sende erstmal ohne Force und lasse mein Programm offen und starte einen Timer von 30sec ist mein programm noch da, weil irgendwer das Runterfahren verhindert, sende ich nochmals mit Force :thumb:

Der schöne Günther 14. Aug 2013 13:42

AW: Rechner Herunterfahren geht nicht
 
Und wer garantiert dir, dass Windows dein Programm zu allerletzt beenden möchte?

DeddyH 14. Aug 2013 16:00

AW: Rechner Herunterfahren geht nicht
 
Man könnte es ja auch erst einmal mit EWX_FORCEIFHUNG ($00000010) versuchen.

arnof 14. Aug 2013 16:29

AW: Rechner Herunterfahren geht nicht
 
Zitat:

Zitat von Der schöne Günther (Beitrag 1224754)
Und wer garantiert dir, dass Windows dein Programm zu allerletzt beenden möchte?

Ganz einfach, mein Programm ist eins, was sich nicht beendet :wink: Alle anderen können schön Ihre Daten speichern, so das es kein Datenverlust gibt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:47 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