Pregunta

He escrito una aplicación con un simple cuadro de texto, que los intentos de identificar a un usuario de sus hábitos de escritura (intervalo entre las pulsaciones de teclas, se lleva a cabo clave de la duración, el tiempo entre pulsaciones de teclas es decir a-> s es más rápido que a-> v para algunos usuarios, más corto para otros, dependiendo de estilo de escritura). Está lejos de ser perfecta, pero sí identifica correctamente las diferencias moderada grandes en estilo.

estoy esperando a utilizar esto como una forma de monitor de seguridad -. Si el estilo de escritura del usuario no se ajusta a un patrón reconocido, informe a un servidor central

Por supuesto, el siguiente paso en la prueba de esto es comenzar a capturar hábitos de escritura "normales" -. Es decir, cuando se navega, el cambio entre aplicaciones, etc.

Lo que no puedo encontrar la manera de hacer es la entrada de teclado de captura para todas las aplicaciones (excluyendo la pantalla de entrada / recepción, escritorios alternativos, etc. - No tengo ninguna razón para analizar eso y probablemente no haya suficiente para analizar la entrada de todos modos )

Renuncia: Sí, sé que esto se acerca peligrosamente a la escritura de un keylogger que está verboten pero si quería hacer eso, me gustaría escribir una controlador de teclado en C ++ - estoy seguro de que sería mucho más ágil y más fácil de ocultar que un descomunal .Net MSIL montaje. He sin duda voy a defenderse de los "Eso es un keylogger" comentarios, pero he golpeado una pared y necesidad de pedir algún lugar ...

No necesito la aplicación que se oculta - pero lo ideal sería ser capaz de entrada de captura sin confirmación explícita del usuario (más allá de la instalación por un administrador) - Si se requiere la confirmación del usuario, puedo vivir con eso (solo) si puede ser de una sola vez y tengo alguna manera de controlar y negaciones de informe.

Es esto posible en .Net? Los únicos ejemplos que he podido encontrar, ya sea operan mediante la adición de un gancho de evento para cada llave que parece torpe y me imagino que es propenso a errores. -o- Se sondean el estado del teclado para determinar las teclas pulsadas. Esto no es bueno para mí, como a) Me necesidades exactas de los tiempos de pulsaciones de teclas tan arriba / abajo eventos son una necesidad y b) que es desagradable.

No me sorprendería si el marco está diseñado específicamente para prohibir este caso en el que voy a tener que recurrir a algún código no administrado para proporcionar los eventos. Yo, obviamente, prefiero utilizar el código administrado hasta el final.

Cualquier ayuda apreciada.

Editar Gracias a la respuesta de Hans Passant, este es el mejor recurso que he encontrado hasta el momento: http://www.codeguru.com/columns/vb/article.php/c4831

¿Fue útil?

Solución

Google + SetWindowsHookEx WH_KEYBOARD_LL, palabras clave que Google también. Que establece un enlace de teclado de bajo nivel. No es un gancho global, de modo puede trabajar en un programa de VB.NET.

Otros consejos

.NET no proporciona ningún servicio de ese tipo, por lo que tendrá que ir más bajo y el uso P / Invoke. Las opciones son:

  • Win engancha
  • Polling usando GetAsyncKeyState
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top