* 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 endifI think you had some others like load,init..