🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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
#339
Author: Krzysztof Czuryło
Date: Thu, 03 Dec 1998 23:15
27 lines
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
#340
Author: Krzysztof Kozłowski
Date: Fri, 04 Dec 1998 07:21
7 lines
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
#341
Author: Krzysztof Pozorek
Date: Fri, 04 Dec 1998 09:31
36 lines
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
#342
Author: Roman Motyka
Date: Fri, 04 Dec 1998 09:57
76 lines
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