Einzelnen Beitrag anzeigen

BlueStarHH

Registriert seit: 28. Mär 2005
Ort: Hamburg
850 Beiträge
 
Delphi 11 Alexandria
 
#1

Herunterfahren verhindern, Programm nicht beenden

  Alt 23. Jun 2016, 10:59
Hallo,

beim Herunterfahren von Windows soll mein Programm das Herunterfahren stoppen (falls die offene Datei noch gespeichert werden muss). Das Programm selbst darf dann auch nicht beendet werden. Mit dem folgendem Code wird zwar das Herunterfahren von Windows gestoppt, das Programm aber trotzdem von Windows beendet. Was ist daran falsch?

Bitte vor dem Herunterfahren auf Button1 klicken, damit ShutdownBlockReasonCreate() aufgerufen wird, was seit Vista nötigt ist, da Windows sonst immer herunterfährt.

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  protected
    procedure WMQueryEndSession(var Message: TWMQueryEndSession);
      message WM_QUERYENDSESSION;
    procedure WMEndSession(var Msg: TWMEndSession); message WM_ENDSESSION;
  public
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

function ShutdownBlockReasonCreate(hWnd: hWnd; pwszReason: LPCWSTR): Bool;
  stdcall; external user32 name 'ShutdownBlockReasonCreate';

function ShutdownBlockReasonDestroy(hWnd: hWnd): Bool; stdcall;
  external user32 name 'ShutdownBlockReasonDestroy';

procedure TForm1.WMQueryEndSession(var Message: TWMQueryEndSession);
begin
  Message.Result := 0;
end;

procedure TForm1.WMEndSession(var Msg: TWMEndSession);
begin
  Msg.Result := 0;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  ShutdownBlockReasonCreate(handle, 'Reason gesetzt!');
end;

end.
  Mit Zitat antworten Zitat