Marco compacto: función de tiempo de espera para bloquear la interfaz de usuario después de un período de inactividad

StackOverflow https://stackoverflow.com/questions/349255

Pregunta

Buenos días,

Soy el desarrollador de una aplicación PDA de tamaño mediano que se utilizará en las calles. El PDA contendrá algunos datos vagamente confidenciales (nombres y direcciones, etc.). El cifrado en la base de datos móvil ya se maneja, sin embargo, si alguien se apodera del PDA mientras está conectado, podría revisar los datos hasta que la batería se agote o cierre la aplicación y tenga que iniciar sesión nuevamente.

Cuando los usuarios acceden a la aplicación PDA, necesitan ingresar su nombre de usuario y número PIN. La versión 1 de este software tenía un evento conectado a cada botón del sistema, de modo que cuando se presionaba el botón, actualizaba una variable llamada LastActionTime. Se ejecutó un temporizador en el formulario principal y si ese LastActionTime fue hace más de 10 minutos, el sistema volvería a arrojar el formulario de inicio de sesión hasta que el usuario / administrador anterior volviera a iniciar sesión (al igual que la pantalla de bloqueo de Windows).

Esto funcionó bien ... en cierto sentido ... el problema con eso es que solo estaba manejando botones y no estaba manejando los otros controles, como ListViews, PictureBoxes, etc.

¿Hay alguna buena manera de lograr esto? Por ejemplo, ¿hay alguna manera de extender una Clase de Windows Form para manejar cada evento y actualizar esa variable en consecuencia? ¿O puedo hacer algo similar a Windows que manejaría cada evento de mouse en el formulario?

Para ser completamente conciso, lo que quiero lograr es que cuando la pantalla / botones de la PDA no se hayan tocado durante 10 minutos, la PDA lo sabrá y me permitirá activar mi método de bloqueo.

Cualquier idea, ayuda y orientación sería muy apreciada.

Editar : estoy usando Compact Framework 2.0 en Windows Mobile 6.0, sin embargo, la función debe funcionar en Windows Mobile 5.0 y superior.

¿Fue útil?

Solución

Una posible solución es confiar en el estado inactivo de alimentación del PDA. Puede registrar una notificación para esto usando OpenNETCF.WindowsCE.PowerManager.PowerIdle Event. De hecho, es una buena idea tener en cuenta las consideraciones de administración de energía. No puede esperar que su PDA esté en el mismo estado todo el tiempo.

Otra solución sería monitorear el evento inactivo del controlador de entrada (consulte esto enlace ). Sin embargo, esta solución es muy específica del dispositivo.

Desafortunadamente no hay forma en Windows CE de registrar un enlace de evento de mouse global.

Lo anterior fueron soluciones de SO. No hay una manera fácil de hacerlo extendiendo las clases de Windows Form y Control. Probablemente tendrías que extender todos los controles que estarías usando. La solución más fácil sería implementar el método GetFocus para todos sus controles y el formulario. Puede restablecer su contador allí.

Por cierto, en un entorno de escritorio esto se puede lograr fácilmente con GetLastInputInfo.

Otros consejos

Mira esta publicación:

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

Luché con el mismo problema y terminé usando Application.AddMessageFilter para obtener los resultados apropiados. Ese hilo finalmente contiene un enlace a un proyecto de muestra que escribí que muestra el funcionamiento del temporizador de inactividad, incluido el apagado de subdiálogos si es necesario para volver a la pantalla de la ventana principal.

David

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top