FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin for Harbour/xHarbour how to get WM_POWERBROADCAST under Fivewin ?
Posts: 1772
Joined: Thu Sep 05, 2019 05:32 AM
how to get WM_POWERBROADCAST under Fivewin ?
Posted: Sat Feb 04, 2023 07:11 AM
hi,

i want to avoid "Energy-Saving" when App is running.

---

there is a WM_POWERBROADCAST Message which i use under Xbase++ / Ot4xb
Code (fw): Select all Collapse
   ELSEIF nMsg == WM_POWERBROADCAST
      DO CASE
         CASE wp = PBT_APMQUERYSUSPEND
            RETURN  BROADCAST_QUERY_DENY

         CASE wp = PBT_APMQUERYSUSPENDFAILED
            RETURN  BROADCAST_QUERY_DENY

         // since Vista ?
         CASE wp = PBT_APMQUERYSTANDBY
            RETURN  BROADCAST_QUERY_DENY

         CASE wp = PBT_APMQUERYSTANDBYFAILED
            RETURN  BROADCAST_QUERY_DENY

         CASE wp = PBT_APMSTANDBY
            RETURN  BROADCAST_QUERY_DENY

*         CASE wp = PBT_APMBATTERYLOW         ; ::_OnDummy("PBT_APMBATTERYLOW       ",Time())
*         CASE wp = PBT_APMOEMEVENT           ; ::_OnDummy("PBT_APMOEMEVENT         ",Time())
*         CASE wp = PBT_APMPOWERSTATUSCHANGE  ; ::_OnDummy("PBT_APMPOWERSTATUSCHANGE",Time())
*         CASE wp = PBT_APMRESUMEAUTOMATIC    ; ::_OnDummy("PBT_APMRESUMEAUTOMATIC  ",Time())
*         CASE wp = PBT_APMRESUMECRITICAL     ; ::_OnDummy("PBT_APMRESUMECRITICAL   ",Time())
*         CASE wp = PBT_APMRESUMESUSPEND      ; ::_OnDummy("PBT_APMRESUMESUSPEND    ",Time())
*         CASE wp = PBT_APMSUSPEND            ; ::_OnDummy("PBT_APMSUSPEND          ",Time())
this will DENY "Energy-Saving" if available

i guess i have to place it in :HandleEvent() ... but in which CLASS :?:
greeting,

Jimmy
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: how to get WM_POWERBROADCAST under Fivewin ?
Posted: Sat Feb 04, 2023 07:31 AM
Dear Jimmy,

You have to inherit a new class from TWindow and redefine the Method HandleEvent( nMsg, nWParam, nLParam )
Code (fw): Select all Collapse
CLASS TMyWindow FROM TWindow

   CLASSDATA lRegistered
   
   METHOD HandleEvent( nMsg, nWParam, nLParam ) 

ENDCLASS

METHOD HandleEvent( nMsg, nWParam, nLParam ) CLASS TMyWindow

   if nMsg == WM_POWERBROADCAST
   endif   
   
return Super:HandleEvent( nMsg, nWParam, nLParam )
regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 1772
Joined: Thu Sep 05, 2019 05:32 AM
Re: how to get WM_POWERBROADCAST under Fivewin ?
Posted: Sat Feb 04, 2023 08:46 AM
hi Antonio,
Antonio Linares wrote:You have to inherit a new class from TWindow and redefine the Method HandleEvent( nMsg, nWParam, nLParam )
Ok, thx i will try it
greeting,

Jimmy
Posts: 1387
Joined: Fri May 23, 2008 01:33 PM
Re: how to get WM_POWERBROADCAST under Fivewin ?
Posted: Tue Feb 07, 2023 08:23 AM

+1

Regards,



Hakan ONEMLI



Harbour & MSVC 2022 & FWH 23.06
Posts: 1772
Joined: Thu Sep 05, 2019 05:32 AM
Re: how to get WM_POWERBROADCAST under Fivewin ?
Posted: Mon Jun 12, 2023 07:28 PM
hi,

it seem that WM_POWERBROADCAST is not "fired" on every Windows 10/11 PC

on some PC it run fine hole Day but other still go "sleep" :?
so i use another Option and that seems to work fine on all PC ( > VISTA )
SetStandbyOFF(.T.) -> no Energy Saving
SetStandbyOFF(.F.) -> normal Energy saving
https://learn.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-setthreadexecutionstate
Code (fw): Select all Collapse
#define ES_CONTINUOUS        0x80000000
#define ES_SYSTEM_REQUIRED   0x00000001
#define ES_DISPLAY_REQUIRED  0x00000002
#define ES_USER_PRESENT      0x00000004
#define ES_AWAYMODE_REQUIRED 0x00000040

FUNCTION SetStandbyOFF( lOnOff )
LOCAL nRet := 0
   DEFAULT lOnOff := .F.
   IF lOnOff = .T.
      nRet := DllCall( "KERNEL32.Dll",, "SetThreadExecutionState", nOr( ES_CONTINUOUS, ES_SYSTEM_REQUIRED, ES_DISPLAY_REQUIRED, ES_AWAYMODE_REQUIRED ) )
   ELSE
      nRet := DllCall( "KERNEL32.Dll",, "SetThreadExecutionState", ES_CONTINUOUS )
   ENDIF
RETURN nRet
p.s. how to make a HB_FUNC() of it :?:
greeting,

Jimmy
Posts: 1387
Joined: Fri May 23, 2008 01:33 PM
Re: how to get WM_POWERBROADCAST under Fivewin ?
Posted: Tue Jun 13, 2023 04:45 PM

+1

Regards,



Hakan ONEMLI



Harbour & MSVC 2022 & FWH 23.06
Posts: 10733
Joined: Sun Nov 19, 2006 05:22 AM
Re: how to get WM_POWERBROADCAST under Fivewin ?
Posted: Tue Jun 13, 2023 05:18 PM
Code (fw): Select all Collapse
HB_FUNC( SETSTANDBY )
{
   EXECUTION_STATE esFlags = ( HB_ISLOG( 1 ) && hb_parl( 1 ) ?
      ( ES_CONTINUOUS | ES_SYSTEM_REQUIRED | ES_DISPLAY_REQUIRED | ES_AWAYMODE_REQUIRED ) :
      ES_CONTINUOUS );

   hb_retnl( ( long ) SetThreadExecutionState( esFlags ) );
}
Regards



G. N. Rao.

Hyderabad, India
Posts: 1772
Joined: Thu Sep 05, 2019 05:32 AM
Re: how to get WM_POWERBROADCAST under Fivewin ?
Posted: Tue Jun 13, 2023 05:23 PM

hi,

thx to show me how HB_FUNC() look like

greeting,

Jimmy

Continue the discussion