Page 1 of 1
How to detect mouse and keyboard not used for a time ?
Posted: Thu Dec 13, 2007 2:32 am
by ShumingWang
Hi,
As title, I want ,if over the setting time ,for example 10 minites ,then app do close app .
Thanks !
Shuming Wang
Posted: Thu Dec 13, 2007 11:14 am
by Antonio Linares
Shuming,
Use a timer that checks a variable that holds the last time when the app was used. Keep such variable updated from your application.
Posted: Thu Dec 13, 2007 12:23 pm
by nageswaragunupudi
This is what I want too. And really very useful.
If in the main Window.Prg's Event Handler, we store the time in seconds whenever an event is handled, we can check thro a timer the difference between last event time and present time.
I am hesitatiing to touch the Window.Prg. If you guide Mr Antonio, we shall do it.
Anyway I have an api to find idle time for the entire system, but that is not what i want. I too want to know how long "my" application is idle.
Posted: Thu Dec 13, 2007 12:30 pm
by nageswaragunupudi
The code I thought of ...
dont know if this works for sure without adding any other complications
Code: Select all
// Window.Prg
STATIC nLastEventTime := NIL
//
//
METHOD HandleEvent( nMsg, nWParam, nLParam ) CLASS Window
nLastEventTime := SECONDS()
RETURN WndHandleEvent( Self, nMsg, nWParam, nLParam )
//
//
FUNCTION ExeIdleTime()
// midnight correction is to be applied
RETURN iif ( nLastEventTime == NIL, 0, SECONDS()-nLastEventTime)
//
Something like this. Can you offer your guidance Mr Antonio ?
Posted: Thu Dec 13, 2007 12:36 pm
by nageswaragunupudi
Here is my C function to know how long the entire system is idle
Code: Select all
#include "hbapi.h"
#include <windows.h>
#include <winuser.h>
HB_FUNC( SYSTEM_IDLESECS )
{
LASTINPUTINFO plii;
DOUBLE dSecs ;
plii.cbSize = sizeof( plii );
if ( GetLastInputInfo( &plii ) )
dSecs = ( DOUBLE ) ( GetTickCount() - plii.dwTime ) * 0.001 ;
else dSecs = 0.0 ;
hb_retnd(dSecs);
}
Posted: Thu Dec 13, 2007 1:23 pm
by Antonio Linares
NageswaraRao,
The application may receive Windows msgs that don't come from the user
Thats why it may be better to check WM_COMMAND and similar msgs only
Posted: Thu Dec 13, 2007 1:30 pm
by nageswaragunupudi
Can you guide me a little further mr. Antonio ?
Posted: Thu Dec 13, 2007 1:43 pm
by Antonio Linares
Code: Select all
METHOD HandleEvent( nMsg, nWParam, nLParam ) CLASS Window
if nMsg == WM_COMMAND
nLastEventTime := SECONDS()
endif
RETURN WndHandleEvent( Self, nMsg, nWParam, nLParam )
Posted: Thu Dec 13, 2007 1:48 pm
by nageswaragunupudi
Mr Antonio
Then do you advise me to add other events like WM_CHAR, WM_KEYDOWN, WM_LBUTTON ...... etc ( events that arise from keyboard and mouse ) to this IF condition ? May be a big list, but may be worth doing it if thats the way
Posted: Thu Dec 13, 2007 1:55 pm
by Antonio Linares
Yes, use the msgs that you want to check