Hace días, el Master Joao (Karinha), me solicitó que le dejara un ejemplo de la función "sysIdleSecs()"
Acá se los dejó, a él y a todo el foro, espero sea de utilidad para muchos.
NOTA: La función mide el tiempo transcurrido SIN actividad del mouse y teclado EN TODA LA PC , no es el tiempo sin actividad dentro de nuestra aplicación.
El contador de dicha función, se reinicia automaticamente a 0 cuando se realiza alguna operacion con el mouse o el teclado.
Un abrazo.
- Code: Select all Expand view RUN
- #Include "Cuentas32.ch"
// function to exit the app when default 'x' number of seconds pass with no activity
// from the keyboard or mouse.
// attention! IT IS NOT THE TIME without activity of our application, it is the inactive time of the PC
// función para salir de la aplicación cuando pasan 'x' cantidad de segundos predeterminados sin actividad
// del teclado o raton.
// ¡atención! NO ES EL TIEMPO sin actividad de nuestra aplicacion, es el tiempo inactivo de la PC
// função para sair do aplicativo quando o número padrão 'x' de segundos passa sem atividade
// do teclado ou mouse.
// atenção! NÃO É O TEMPO sem atividade do nosso aplicativo, é o tempo inativo do PC
Static oDlg, oTimerExit
Static nInterval
****************************************************************************************************************************
Function Fnct_Prueba()
Local oGet1
Local cVar1 := spac(10)
Public nSecondsToOut:= 55 //(segundos)
nInterval:=1*60000 //(1 x 60000 = 1 minuto)
Define Dialog oDlg resource "oDlg_Prueba"
Redefine get oGet1 Var cVar1 Id 100 of oDlg
Activate Dialog oDlg on init (oGet1:SetFocus(),Fnct_StartCounterTime() )
Return ( Nil )
***********************************************************************************************************************
Function Fnct_StartCounterTime ()
Define Timer oTimerExit of oDlg Interval nInterval Action ( iif( sysIdleSecs()>nSecondsToOut,fExit(),))
oTimerExit:Activate()
Return NIL
********************************************************************************************************************
function fExit()
oTimerExit:Deactivate()
oTimerExit:End()
msgAlert('Tu Sesión Finalizó Por Inactividad.','Fin de Sesión')
oDlg:End()
quit
return .t.
*********************************************************************************************************************
// typedef struct tagLASTINPUTINFO {
// UINT cbSize;
// DWORD dwTime;
// } LASTINPUTINFO, *PLASTINPUTINFO;
WINUSERAPI BOOL WINAPI GetLastInputInfo(PLASTINPUTINFO);
typedef BOOL (WINAPI *GETLASTINPUTINFO_)(PLASTINPUTINFO);
HB_FUNC( SYSIDLESECS )
{
HINSTANCE handle= LoadLibrary("user32.dll");
if ( handle)
{
GETLASTINPUTINFO_ pFunc;
pFunc = GetProcAddress( handle,"GetLastInputInfo" );
if (pFunc)
{
LASTINPUTINFO lpi;
lpi.cbSize = sizeof(LASTINPUTINFO);
if (!pFunc(&lpi))
{
hb_retni(0);
}
else
{
hb_retnd( ( DOUBLE ) ( GetTickCount() - lpi.dwTime ) * 0.001 );
}
}
else
{
hb_retni(0);
}
}
if (handle)
{
FreeLibrary( handle);
}
}
#pragma ENDDUMP
***********************************************************************************************+
NOTA: El archivo "Cuentas32.ch" que esta al inicio del código, es mi versión personalizada del "Fivewin.ch"