Oh weh, 6 Jahre her und schon vergessen...
Bei dieser Diskussion kam eine dunkle Erinnerung hoch und siehe da, hatte vor längerer Zeit diese Problematik in einer anderen Client/Server Anwendung schon mal eingebaut, also für alle, die das evtl. mal brauchen könnten, hier, wie es geht:
Delphi-Quellcode:
procedure TF_Main.WMPowerBroadcast(var MyMessage: TMessage);
begin
if MyMessage.Msg = WM_POWERBROADCAST then begin
// windows powermanagement message
if (MyMessage.WParam = PBT_APMSUSPEND) or
(MyMessage.WParam = PBT_APMSTANDBY) or
(MyMessage.WParam = PBT_APMQUERYSUSPEND) or
(MyMessage.WParam = PBT_APMQUERYSTANDBY)
then begin
// Hier hin, was getan werden muss, bevor Windows in den Standby darf,
// z.B. Netzwerk- oder Datenbankverbindungen trennen, Timer abstellen, etc.
// Seit Vista hat man hier nur noch max. 2 Sekunden Zeit was zu erledigen.
if NetFileMode then begin
mnu_CloseMainFileClick (self);
end;
MyMessage.Result := 1; // Standby/Ruhezustand erlauben
// MyMessage.Result := BROADCAST_QUERY_DENY; // Standby/Ruhezustand verweigern
end
else
if (MyMessage.WParam = PBT_APMRESUMECRITICAL) or
(MyMessage.WParam = PBT_APMRESUMESUSPEND) or
(MyMessage.WParam = PBT_APMRESUMESTANDBY)
then begin
// Windows kommt aus dem Standby/Ruhezustand wieder.
// Hier z.B. Verbindungen wiederherstellen.
hs_delay (2000, True);
if LastNetFile <> '' then begin
if EstablishServerConnection = 'OK' then begin
GetFileFromServer (AsStr (['UserId=' + MyNetUserID, 'cmd=GetThisFile', 'Password=' + LastPW, 'FileName=' + LastNetFile]));
end;
LastNetFile := '';
end;
end;
end;
inherited;
end;