Einzelnen Beitrag anzeigen

Benutzerbild von ULIK
ULIK

Registriert seit: 25. Sep 2006
Ort: Regensburg
416 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: WM_POWERBROADCAST wie verwenden?

  Alt 30. Okt 2019, 14:48
Danke für den Hinweis. Inzwischen bin ich auch schlauer: selbst
PBT_APMRESUMEAUTOMATIC
PBT_APMRESUMESUSPEND
PBT_APMSUSPEND
werden nicht empfangen. Damit das wieder geht muß sich die Anwendung mit RegisterSuspendResumeNotification anmelden und entsprechend wieder abmelden (UnRegisterSuspendResumeNotification). Dies wäre angeblich seit Windows 8 so.
Dummerweise ist diese API nicht in Delphi 10.2 enthalten. Hab das mal selbst gemacht und siehe da, schon werden beim Schließen des Laptopdeckels wieder PBT_APMSUSPEND und anschließend beim Öffnen PBT_APMRESUMEAUTOMATIC und PBT_APMRESUMESUSPEND empfangen.

Hier mal etwas Code:
Delphi-Quellcode:
var
  hLibrary: THandle = 0;

  RegisterSuspendResumeNotification: function(hRecipient: THandle; flags: DWORD): HPOWERNOTIFY; stdcall = nil;
  UnRegisterSuspendResumeNotification: function(hNotification: HPOWERNOTIFY): Bool; stdcall = nil;

...

  hLibrary := LoadLibrary('user32.dll');
  if hLibrary <> 0 then
  begin
    RegisterSuspendResumeNotification := GetProcAddress(hLibrary, 'RegisterSuspendResumeNotification');
    UnRegisterSuspendResumeNotification := GetProcAddress(hLibrary, 'UnregisterSuspendResumeNotification');
  end;
Der Aufruf erfolgt dann z.B. im FormCreate mit hNotification := RegisterSuspendResumeNotification(Handle, DEVICE_NOTIFY_WINDOW_HANDLE); ; entsprechend dann UnRegisterSuspendResumeNotification(hNotification) im FormDestroy


Frohes Schaffen!
  Mit Zitat antworten Zitat