Einzelnen Beitrag anzeigen

schwa226

Registriert seit: 4. Apr 2008
400 Beiträge
 
#18

Re: Windows 7 Standby/Hibernate Phänomen

  Alt 9. Dez 2009, 19:38
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??
Delphi 2010, Update 4 & 5
  Mit Zitat antworten Zitat