Thread View: pl.comp.bazy-danych.msaccess
4 messages
4 total messages
Started by Krzysztof Czuryło
Thu, 03 Dec 1998 23:15
Automatyczny logout w Accesie
Author: Krzysztof Czuryło
Date: Thu, 03 Dec 1998 23:15
Date: Thu, 03 Dec 1998 23:15
27 lines
2110 bytes
2110 bytes
Tworzona przeze mnie baza w Accesie będzie użytkowana przez wiele osób, a dostęp zabezpieczony hasłami. Chciałbym, aby w wypadku, gdy użytkownik zapomni zamknąć Accessa lub wyjdzie na chwilę, po zadanym czasie nieaktywności Access sam się zamykał. Samo odmierzanie czasu jest trywialne. Problem leży w kontrolowaniu aktywności/nieaktywności użytkownika. Pracochłonnym rozwiązaniem byłoby pokrycie metod OnKeyPress, OnMouseDown, etc. dla każdego formularza i każdego formantu, aby każde takie zdarzenie zerowało licznik czasu nieaktywności. Proste w zamyśle, ale jakby mało eleganckie i wymaga modyfikacji każdego formantu!!! Drugi, jeszcze gorszy sposób, to prośba o ponowne podawanie hasła po zadanym czasie. Nie trzeba sprawdzać aktywności użytkownika, ale może być denerwujące. Wolałbym jakiś prosty i elegancki sposób. Np. globalne przechwycenie obsługi zdarzeń klawiatury i myszy. Czy ktoś ma jakiś pomysł jak to zrobić? Pozdrawiam -- +- Krzysztof Czurylo -+ +- Technical University of Gdansk & Medical University of Gdansk -+ +- krzycz2@SPAM.polbox.KILLER.com -+ +- remove 'SPAM.' and 'KILLER.' before reply !!! -+
Re: Automatyczny logout w Accesie
Author: Krzysztof Kozłowski
Date: Fri, 04 Dec 1998 07:21
Date: Fri, 04 Dec 1998 07:21
7 lines
980 bytes
980 bytes
> Samo odmierzanie czasu jest trywialne. Problem leży w kontrolowaniu Trywialne? Jak ? Pytalem o to pare dni temu i nikt jakos nie odpowiedzial... Pozdowienia Diesel
Re: Automatyczny logout w Accesie
Author: Krzysztof Pozorek
Date: Fri, 04 Dec 1998 09:31
Date: Fri, 04 Dec 1998 09:31
36 lines
2129 bytes
2129 bytes
Skoro nikt nie odpowiedzial to moze ja...
Mozna do tego celu uzyc np takich funkcji API:
Type POINTAPI
X As Long
Y As Long
End Type
Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Declare Function GetCaretPos Lib "user32" (lpPoint As POINTAPI) As Long
Pierwsza z nich zwraca biezaca pozycje kursora myszki, a druga pozycje
kursora tekstowego - karetki. Jak je wykorzystasz niech to zalezy od Twojej
pomyslowosci ale odpowiedni fragment kodu moze wygladac np tak:
Static IleCiszy As Long
Static CursorXY As POINTAPI, CursorOld As POINTAPI
Static CaretXY As POINTAPI, CaretOld As POINTAPI
Const DoscCiszy = 12 '4 minuty przy zalozeniu interwalu 20000
Call GetCursorPos(CursorXY)
Call GetCaretPos(CaretXY)
If (CursorXY.X = CursorOld.X) And (CaretXY.X = CaretOld.X) And
(CursorXY.Y = CursorOld.Y) And (CaretXY.Y = CaretOld.Y) Then
IleCiszy = IleCiszy + 1
Else
IleCiszy = 0
End If
CursorOld = CursorXY
CaretOld = CaretXY
If IleCiszy > DoscCiszy Then
Timer1.Enabled = 0
IleCiszy = 0
'(..............) tutaj fragment kodu, wyzwalany po uplywie okreslonego
czasu nieaktywnosci uzytkownika
Timer1.Enabled = -1
End If
Re: Automatyczny logout w Accesie
Author: Roman Motyka
Date: Fri, 04 Dec 1998 09:57
Date: Fri, 04 Dec 1998 09:57
76 lines
3423 bytes
3423 bytes
Mamy formatkę z dwoma okienkami tekstowymi jak się nie ruszymy z jednego do
drugiego to...
(nie testowałem tego), a pochodzi to z bazy M$, z przykładowymi formatkami
do A97.
Może pomoże :-)
Pozdrowienia,
Roman.
Option Compare Database
Option Explicit
Private Sub Form_Timer()
' IDLEMINUTES determines how much idle time to wait for before
' running the IdleTimeDetected subroutine.
Const IDLEMINUTES = 1
Static PrevControlName As String
Static PrevFormName As String
Static ExpiredTime
Dim ActiveFormName As String
Dim ActiveControlName As String
Dim ExpiredMinutes
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 call the IdleTimeDetected subroutine.
IdleTimeDetected ExpiredMinutes
End If
End Sub
Sub IdleTimeDetected(ExpiredMinutes)
Dim Msg As String
Msg = "No user activity detected in the last "
Msg = Msg & ExpiredMinutes & " minute(s)!"
MsgBox Msg, 48
End Sub
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads