Ich quäle mich auch seit ein paar Tagen mit dem gleichen Prob in einer
DLL herum.
Du solltest zunächst mal versuchen, deine Form anders zu erzeugen:
Delphi-Quellcode:
if not Assigned(FormPowerWatch) then
FormPowerWatch := TFormPowerWatch.Create(Application);
Ich bin zunächst darüber gestolpert, das ein 'Wachwerden' nicht erkannt wurde, weil ich nur auf PBT_APMRESUMESUSPEND und PBT_APMRESUMESTANDBY geprüft habe.
PBT_APMRESUMESTANDBY kommt bei mir gar nicht und PBT_APMRESUMESUSPEND nur, wenn eine Taste gedrückt oder die Maus bewegt wird.
PBT_APMRESUMEAUTOMATIC ($0012) hingegen kommt immer - egal aus welchem 'Schlafzustand' geweckt wird.
Dann solltest du vielleicht noch in deiner WMPowerBroadcast-Procedure auf das Case zur Abfrage von Msg.Msg verzichten und gleich in ein Case für Msg.wParam springen und prüfen.
Bei der Deklaration
procedure WMPowerBroadcast(var MyMessage: TMessage); message WM_POWERBROADCAST;
wird ja schon vorgegeben, auf welche message reagiert werden soll...
Bei mir sieht das so aus:
Delphi-Quellcode:
procedure TFWUC_MAIN.WMPowerBroadcast(var Msg: TMessage);
begin
LOG('... PowerBroadcast: ' + inttostr(Msg.wParam) + ' - ' + inttostr(Msg.lParam));
case Msg.wParam of
PBT_APMSUSPEND,
PBT_APMSTANDBY:
begin
// System geht in Standby
LOG('... geht in StandBy/Hibernate');
MachHierWasNotwendigIstZumSchlafengehen;
end;
PBT_APMRESUMEAUTOMATIC :
// PBT_APMRESUMESUSPEND,
// PBT_APMRESUMESTANDBY:
begin
// System kommt aus dem Standby
LOG('... ReActivate ...');
MachHierWasNotwendigIstNachWachwerden;
end;
end;
msg.Result := 1
end;