venerdì 29 agosto 2014

LOGOUT AUTOMATICO NELLE APPLICAZIONI DOTNET

spesso può essere necessario implementare una logica di logout automatico nelle applicazioni in ambiente dotNet (winforms, per intenderci). Vediamo insieme come sviluppare un semplice controllo per implementare il logout automatico.



L'esempio di codice che propongo è in C#. Ci tengo a precisare che il logout viene effettuato sulla applicazione e non sull'utente di windows collegato alla macchina (se si volesse effettuare il logout dell'utente basta inserire uno screensaver con richiesta di accesso al ripristino)


Introduzione

Prima di tutto ragioniamo di ambiente Windows, dove le applicazioni ricevono dei messaggi dal sistema operativo che corrispondono a determinate operazioni. Esistono i messaggi relativi alle periferiche di input (mouse e tastiera) che considero determinanti per capire se sul sistema non viene effettuata alcuna operazione.

La logica è quella di implementare un timeout, impostato al tempo di logout (5 minuti), che viene resettato se avviene un input da utente. Se il timeout arriva a generare l'evento Tick significa che per il tempo impostato l'utente non ha effettuato operazioni, quindi possiamo agire sul logout.


I Messaggi di Windows

Iniziamo con la definizione dei messaggi di Windows (per maggiori dettagli consultare la libreria windows.h)



Per realizzare la logica è quindi necessario utilizzare un oggetto Timer  e implementare l'interfaccia IMessageFilter necessaria per intercettare le system call del sistema operativo. Implementando l'interfaccia deve essere gestito il metodo PreFilterMessage che fornisce la possibilità di analizzare la tipologia di messaggio intercettato di tipo Message la cui proprietà Msg è il numero intero da controllare con la sopra descritta struttura WindowsMessage.

Come fare?

Inseriamo all'interno del nostro form un oggetto di tipo Timer con un timeout impostato a piacere sul cui evento Tick verrà gestita la logica di logout desiderata. Successivamente, magari all'interno del nostro handler dell'evento FormLoad, definiamo che il form intercetterà i messaggi attraverso l'istruzione:

Application.AddMessageFilter(this);

Esempio

Vediamo quindi un esempio veramente primitivo di un form che implementa tutto questo:



Nessun commento:

Posta un commento