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.