Heenan, Lambert
Lambert.Heenan at AIG.com
Thu May 3 08:26:27 CDT 2007
This is quite simple to do and was laid out in some Kb article or other that
I read years ago.
Because most Access applications are interactive, you don't need to worry
about tracking keystrokes or mouse movements. Instead you just need to watch
what forms, and controls within those forms are currently active, and this
is made very easy by using the Screen object. You can use its ActiveForm and
ActiveControl properties to keep tabs on where the user is. This is all done
inside a form that you open as hidden, and it has a timer event that checks
the user activity.
In my apps I simply kick inactive users out, but you could just as easily
pop up a modal form that demands a password.
Below is the essential code you need in the forms timer event. No need at
all for class wrappers and sinking mouse events.
HTH
Lambert
Private Sub Form_Timer()
Const IDLEMINUTES = 30
Static PrevControlName As String
Static PrevFormName As String
Static ExpiredTime As Long
Dim ActiveFormName As String
Dim ActiveControlName As String
Dim ExpiredMinutes As Long
On Error Resume Next
' Get the active form and control name.
ActiveFormName = Screen.ActiveForm.Name
If Err Then
ActiveFormName = "No Active Form"
Err = 0
End If
ActiveControlName = Screen.ActiveControl.Name
If Err Then
ActiveControlName = "No Active Control"
Err = 0
End If
' Record the current active names and reset ExpiredTime if:
' 1. They have not been recorded yet (code is running
' for the first time).
' 2. The previous names are different than the current ones
' (the user has done something different during the timer
' interval).
If (PrevControlName = "") Or (PrevFormName = "") _
Or (ActiveFormName <> PrevFormName) _
Or (ActiveControlName <> PrevControlName) Then
PrevControlName = ActiveControlName
PrevFormName = ActiveFormName
ExpiredTime = 0
Else
' ...otherwise the user was idle during the time interval, so
' increment the total expired time.
ExpiredTime = ExpiredTime + Me.TimerInterval
End If
' Does the total expired time exceed the IDLEMINUTES?
ExpiredMinutes = (ExpiredTime / 1000) / 60
If ExpiredMinutes >= IDLEMINUTES Then
' ...if so, then reset the expired time to zero...
ExpiredTime = 0
' AND HERE DO WHATEVER YOU NEED TO DO WHEN A USER HAS
' NOT DONE ANYTHING FOR THE DEFINED IDLEMINUTE PERIOD
End If
End Sub
-----Original Message-----
From: accessd-bounces at databaseadvisors.com
[mailto:accessd-bounces at databaseadvisors.com] On Behalf Of Arthur Fuller
Sent: Thursday, May 03, 2007 7:53 AM
To: Access Developers discussion and problem solving
Subject: [AccessD] Lock-screen inside an Access app
A friend asked me how he could put a Windows-like screen lock (that asks for
a password) inside an Access app. He's thinking that it's a hidden form that
then appears after x minutes of inactivity and wants a password before
letting the user back into the app. Presumably it would shut the app down
with no valid password.
Does anyone have an idea how to do this?
TIA,
Arthur
--
AccessD mailing list
AccessD at databaseadvisors.com
http://databaseadvisors.com/mailman/listinfo/accessd
Website: http://www.databaseadvisors.com