Da ich das Problem noch immer nicht gelößt habe mus ich hier nocheinmal nachfragen!
Ich erzeuge nun so ein Window das auch WM_POWERBROADCAST Messages erhält:
Delphi-Quellcode:
hWindowParent := FindWindow('Shell_TrayWnd',nil);
if hWindowParent <> 0 then
begin
//create window for powerbroadcasts:
zeromemory(@wa, sizeof(wa)); // <--<<
with wa do begin
lpszClassName := 'My_Power_Broadcast';
lpfnWndProc := @uMain.PowerBroadcastWndProc;
Style := CS_VREDRAW or CS_HREDRAW;
hInstance := GetCurrentProcessID;//hMain;
hIcon := 0;//LoadIcon(0, IDI_APPLICATION);
hCursor := 0;//LoadCursor(0, IDC_ARROW);
hbrBackground := (COLOR_WINDOW + 1);
lpszMenuName := nil;
cbClsExtra := 0;
cbWndExtra := 0;
end;
if (Windows.RegisterClass(wa) = 0) then
WriteLog('Error RegisterClass')
else
begin
hWindowChild := CreateWindowEx(WS_EX_TOPMOST Or WS_EX_TOOLWINDOW,
'My_Power_Broadcast',
'',
WS_POPUP, // <--<<
0, 0,
0, 0, // <--<<
hWindowParent,
0,
GetCurrentProcessID,
nil);
if hWindowChild = 0 then
WriteLog('Error CreateWindowEx: hWindowChild')
else
WriteLog('Info CreateWindowEx: hWindowChild ok');
end;
end
else
WriteLog('Error FindWindow: Shell_TrayWnd');
Das Fenster wird auch braf als Child von Shell_TrayWnd erzeugt.
Nun habe ich mit Winspy gesehen, dass die Message PBT_APMSUSPEND zwar beim Fenster Shell_TrayWnd ankommt, jedoch nicht bei meinem!
Die Messages: PBT_APMRESUMESTANDBY & PBT_APMRESUMEAUTOMATIC kommen jedoch auch bei meinem Fenster an.
Warum bekomme ich die Meldung nicht das er in den Standby geht??
Kann ich einen Messagehook auf Shell_TrayWnd machen? Habe glaube einmal gelesen zu haben das so ein Hook aber nicht so gut ist...
Jemand einen Tipp??