Usando HwGui
Exemplo de uso:
InatividadeApp( 300 ) // Encerra a aplicação em 5 min caso não tenha nenhuma atividade de teclado/mouse
#include "hwgui.ch"
THREAD STATIC ThisForm
FUNCTION InatividadeApp( nTimeOut )
LOCAL oDlg_Wait
Hb_Default(@nTimeOut, 3600) // 1 hora
INIT DIALOG oDlg_Wait ;
TITLE "" ;
AT 0, 0 ;
SIZE 0, 0 ;
FONT HFont():Add( 'Tahoma', 0, -13, 400 ) ;
ON INIT {|This| This:Hide()}
ThisForm := oDlg_Wait
Liga_Timer( oDlg_Wait, .T., 1000, { || Inatividade( nTimeOut ) }, "oTimer" )
ACTIVATE DIALOG oDlg_Wait NOMODAL //SHOW SW_HIDE //ON ACTIVATE { || oDlg_Wait:Hide() }
RETURN oDlg_Wait
STATIC FUNCTION Liga_Timer( oJanela, lLiga, nTime, bBlock, oTimer )
IF lLiga
SET TIMER &oTimer. of oJanela VALUE nTime ACTION bBlock
ELSE
oJanela:&oTimer.:End()
ENDIF
RETURN Nil
STATIC FUNCTION Inatividade( nTimeOut )
THREAD STATIC nSeconds
LOCAL nIntCount
Hb_Default(@nTimeOut, 3600) // 1 hora
IF nSeconds = Nil
nSeconds := Seconds()
ENDIF
nIntCount := Int( PegaInatividade() )
IF nIntCount == 0
nSeconds := Seconds()
ENDIF
IF Seconds() - nSeconds >= nTimeOut
Liga_Timer( ThisForm, .F., , , "oTimer" )
MensagemTimeOut("Encerrando a Aplicação", "Atenção", 10, 4)
hwg_ExitProcess()
ENDIF
RETURN Nil
#pragma BEGINDUMP
#include "windows.h"
#include "time.h"
#include "hbapi.h"
HB_FUNC_STATIC( PEGAINATIVIDADE )
{
LASTINPUTINFO lpi;
lpi.cbSize = sizeof (LASTINPUTINFO);
GetLastInputInfo (&lpi);
hb_retnd( ( DOUBLE ) ( GetTickCount() - lpi.dwTime ) / CLOCKS_PER_SEC );
}
#pragma ENDDUMP