Domanda

Buongiorno

Sono lo sviluppatore di un'applicazione PDA di medie dimensioni che verrà utilizzata per le strade. Il PDA conterrà alcuni dati vagamente sensibili (nomi e indirizzi, ecc.). La crittografia sul database mobile è già gestita, tuttavia se qualcuno si è impossessato del PDA mentre è stato effettuato l'accesso potrebbe felicemente passare attraverso i dati fino a quando la batteria non si esaurisce o chiudono l'applicazione e devono accedere di nuovo.

Quando gli utenti accedono all'applicazione PDA devono inserire nome utente e codice PIN. La versione 1 di questo software aveva un evento collegato a ogni pulsante del sistema in modo tale che, quando veniva premuto, il pulsante aggiornava una variabile chiamata LastActionTime. Un timer è stato eseguito sul modulo principale e se LastActionTime era più di 10 minuti fa, il sistema avrebbe lanciato nuovamente il modulo di accesso fino a quando l'utente / amministratore precedente non avesse effettuato nuovamente l'accesso (proprio come la schermata di blocco di Windows).

Questo ha funzionato bene ... in un certo senso ... il problema è che stava solo gestendo i pulsanti e non stava gestendo gli altri controlli, come ListViews, PictureBox, ecc.

C'è un buon modo per raggiungere questo obiettivo? Ad esempio, esiste un modo per estendere una classe Windows Form per gestire ogni singolo evento e aggiornare quella variabile di conseguenza? O posso fare qualcosa di simile a Windows che gestisca ogni singolo evento del mouse sul modulo?

Per essere completamente conciso, quello che voglio ottenere è che quando lo schermo / i pulsanti del PDA non vengono toccati per 10 minuti, il PDA lo saprà e mi permetterà di attivare il mio metodo di blocco.

Qualsiasi pensiero, aiuto e guida sarebbero molto apprezzati.

Modifica : sto usando Compact Framework 2.0 su Windows Mobile 6.0, tuttavia la funzione deve funzionare su Windows Mobile 5.0 e versioni successive.

È stato utile?

Soluzione

Una possibile soluzione è fare affidamento sullo stato di inattività dell'alimentazione del PDA. È possibile registrare una notifica per questo utilizzando OpenNETCF.WindowsCE.PowerManager.PowerIdle Event. In effetti è una buona idea tenere conto delle considerazioni sulla gestione del risparmio di energia. Non puoi aspettarti che il tuo PDA sia sempre nello stesso stato.

Un'altra soluzione sarebbe quella di monitorare l'evento inattivo del driver di input (Vedi link ). Tuttavia, questa soluzione è molto specifica per dispositivo.

Purtroppo in Windows CE non è possibile registrare un hook globale di eventi del mouse.

Quanto sopra erano soluzioni OS. Non esiste un modo semplice per farlo estendendo le classi di Windows Form e Control. Probabilmente avresti bisogno di estendere tutti i controlli che useresti. La soluzione più semplice sarebbe quella di implementare il metodo GetFocus per tutti i controlli e il modulo. Puoi resettare il tuo contatore lì.

A proposito, in un ambiente desktop questo può essere facilmente ottenuto con GetLastInputInfo.

Altri suggerimenti

Dai un'occhiata a questo post:

http: //social.msdn.microsoft.com/Forums/en-US/netfxcompact/thread/906b016d-f1ee-4b3e-b3df-1e3a6fea282a/

Ho lottato con lo stesso problema e ho finito per usare Application.AddMessageFilter per ottenere i risultati appropriati. Quel thread alla fine contiene un collegamento a un progetto di esempio che ho scritto che mostra il timer di inattività funzionante, incluso la chiusura dei dialoghi secondari, se necessario, per tornare alla schermata della finestra principale.

David

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top