Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
A Global Timer since last User's Input
Message
From
08/12/2004 06:47:33
Cetin Basoz
Engineerica Inc.
Izmir, Turkey
 
 
General information
Forum:
Visual FoxPro
Category:
Coding, syntax & commands
Miscellaneous
Thread ID:
00897805
Message ID:
00967696
Views:
16
Hi Peter,
1) Couldn't understand this question. It's checked for all. Activity accepted to occur with either mouse movement or a keypress. For mouse checking GetCursorPos() and saving last point where mouse is.
2) Checking screensaver because if a screensaver is set it could do the work for me. Then I check if a screensaver state was entered.
3) No the code pasted there is not complete. Just the core pieces.

Here is a more detailed version (not full but near):
* tmrCheckScrSaver.Timer
#Define SPI_GETSCREENSAVETIMEOUT   14
#Define SPI_SETSCREENSAVETIMEOUT   15
#Define SPI_GETSCREENSAVEACTIVE    16
#Define SPI_SETSCREENSAVEACTIVE    17
#Define SPI_GETSCREENSAVERRUNNING 114
#Define SPI_SETSCREENSAVERRUNNING  97
#Define SPI_SCREENSAVERRUNNING     SPI_SETSCREENSAVERRUNNING

Local bActive, bRunning, iTimeout, ltStart, ltEntered
Store 0 To bActive, bRunning, iTimeout
SystemParametersInfo(SPI_GETSCREENSAVEACTIVE, 0,@bActive, 0)
If ( bActive = 0 )
	this.Enabled = .F.
	this.Interval = 5000
	WITH thisform.tmrCheckActivity
		.Tag = 'START_CHECK'
		.Enabled = .T.
	endwith
Endif

Do Case
Case Inlist(This.Tag,'START_CHECK','RESET')
	SystemParametersInfo(SPI_GETSCREENSAVERRUNNING, 0,@bRunning, 0)
	If bRunning = 0 && ScreenSaver is not up
		This.Tag = 'TRACK_SCRSAVER_START'
	Else
		This.Tag = 'WAITFOR_NSECONDS'
	Endif
	This.Interval = 5000 && Check every 5 secs
	This.Reset

Case This.Tag = 'TRACK_SCRSAVER_START'
	SystemParametersInfo(SPI_GETSCREENSAVERRUNNING, 0,@bRunning, 0)
	If bRunning # 0 && ScreenSaver is up
		This.Tag = 'WAITFOR_NSECONDS'
		Thisform.tStarted = Datetime()
	Endif
	This.Interval = 5000
	This.Reset
Case This.Tag = 'WAITFOR_NSECONDS'
	SystemParametersInfo(SPI_GETSCREENSAVERRUNNING, 0,@bRunning, 0)
	If bRunning = 0 && User stopped screen saver
		SystemParametersInfo(SPI_GETSCREENSAVETIMEOUT, 0,@iTimeout, 0)
		Thisform.nTimeOut = iTimeout
		This.Interval = Thisform.nTimeOut * 1000
		This.Reset
		This.Tag = 'RESET'
	Else
		If Datetime() - Thisform.tStarted > Thisform.nWaitFor
			This.Enabled = .F. && Stop tracking, time has arrived - auto logout
			Thisform.Logout('AUTO')
		Endif
	Endif
Case This.Tag = 'WAS_RUNNING'
	SystemParametersInfo(SPI_GETSCREENSAVERRUNNING, 0,@bRunning, 0)
	If bRunning # 0 && ScreenSaver is up
		This.Interval = 5000
		This.Reset
		This.Tag = 'WAITFOR_NSECONDS'
		Thisform.tStarted = Datetime()
	Endif
Endcase

* tmrCheckActivity.timer
#Define SPI_GETSCREENSAVETIMEOUT   14
#Define SPI_SETSCREENSAVETIMEOUT   15
#Define SPI_GETSCREENSAVEACTIVE    16
#Define SPI_SETSCREENSAVEACTIVE    17
#Define SPI_GETSCREENSAVERRUNNING 114
#Define SPI_SETSCREENSAVERRUNNING  97
#Define SPI_SCREENSAVERRUNNING     SPI_SETSCREENSAVERRUNNING

If thisform.ActivityDetected()
	this.Tag = 'START_CHECK'
	Return
Else
	If this.Tag = 'START_CHECK'
		thisform.tStarted = Datetime()
		this.Tag = 'INACTIVE'
		return
	endif
EndIf

Local bActive, iTimeout, bRunning
Store 0 To bActive, iTimeout, bRunning
SystemParametersInfo(SPI_GETSCREENSAVEACTIVE, 0,@bActive, 0)
If ( bActive # 0 )  && ScreenSaver is enabled - pass control to screen saver
	SystemParametersInfo(SPI_GETSCREENSAVETIMEOUT, 0,@iTimeout, 0)
	Thisform.nTimeout = iTimeout
	SystemParametersInfo(SPI_GETSCREENSAVERRUNNING, 0,@bRunning, 0)
	This.Enabled = .F.
	With Thisform.tmrCheckScrSaver
		.Tag = Iif( ( bRunning # 0 ), 'WAS_RUNNING','TRACK_SCRSAVER_START')
		.Interval = 100
		.Enabled = .T.
	EndWith
	return
Endif

If Datetime() - Thisform.tStarted > Thisform.nWaitFor + thisform.nCheckActivity * 60
	This.Enabled = .F. && Stop tracking, time has arrived - auto logout
	Thisform.Logout('NOACTIVITY')
Endif

*tmrMaxPeriod
thisform.tmrCheckScrSaver.Enabled = .F.
this.Enabled = .F.				
thisform.Logout('MAXPERIOD')

* StartTracking
#Define SPI_GETSCREENSAVETIMEOUT   14
#Define SPI_SETSCREENSAVETIMEOUT   15
#Define SPI_GETSCREENSAVEACTIVE    16
#Define SPI_SETSCREENSAVEACTIVE    17
#Define SPI_GETSCREENSAVERRUNNING 114
#Define SPI_SETSCREENSAVERRUNNING  97
#Define SPI_SCREENSAVERRUNNING     SPI_SETSCREENSAVERRUNNING

LOCAL bActive, iTimeout
Store 0 To bActive, bRunning, iTimeout
SystemParametersInfo(SPI_GETSCREENSAVETIMEOUT, 0,@iTimeout, 0)
SystemParametersInfo(SPI_GETSCREENSAVEACTIVE, 0,@bActive, 0)
thisform.nTimeOut = iTimeOut
thisform.tStarted = DATETIME()
thisform.ActivityReset()
IF ( bActive = 0)
	WITH thisform.tmrCheckActivity
		.Tag = 'START_CHECK'
		.Enabled = .T.
	endwith
else
	WITH thisform.tmrCheckScrSaver
		.Tag = 'START_CHECK'
		.Interval = thisform.nTimeout * 1000
		.Enabled = .T.
	endwith
endif
I think you had some others like load,init..
Cetin
Çetin Basöz

The way to Go
Flutter - For mobile, web and desktop.
World's most advanced open source relational database.
.Net for foxheads - Blog (main)
FoxSharp - Blog (mirror)
Welcome to FoxyClasses

LinqPad - C#,VB,F#,SQL,eSQL ... scratchpad
Previous
Next
Reply
Map
View

Click here to load this message in the networking platform