elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  Diferenciar eventos según teclado C#
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Diferenciar eventos según teclado C#  (Leído 3,459 veces)
kondrag_X1

Desconectado Desconectado

Mensajes: 157


Ver Perfil
Diferenciar eventos según teclado C#
« en: 12 Abril 2015, 19:09 pm »

Hola gente,

Miren pues resulta que estoy haciendo un programa en C# y quisiera saber como diferenciar cuando es un teclado u otro. Es decir, tengo el teclado y despues tengo un disposito conectado por usb que simula un teclado. Mi problema es como diferenciarlos en los eventos del form, en concreto estoy utilizando el evento Keypress.

un saludo.


En línea

fran800m

Desconectado Desconectado

Mensajes: 204



Ver Perfil
Re: Diferenciar eventos según teclado C#
« Respuesta #1 en: 16 Abril 2015, 20:55 pm »

Quizá debas interrogar al sistema operativo sobre los dispositivos conectados.

En una búsqueda rápida he encontrado la clase KeyboardCapabilities y el namespace Windows.Devices.Input prueba por ahí a ver qué encuentras.

Un saludo,


En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.885



Ver Perfil
Re: Diferenciar eventos según teclado C#
« Respuesta #2 en: 17 Abril 2015, 00:06 am »

en concreto estoy utilizando el evento Keypress.

Puedes hacerlo mediante la detección genérica de la entrada del teclado (RAW Input), pero requiere la implementación de una lógica algo tediosa (o aburrida), primero debes documentarme bastante (sobre todos los conceptos, mensajes, y estructuras que no mencionaré aquí abajo) y realizar mucho P/Invoking en tu código.

1) Obten los dispositivos de teclado/usb con la función GetRawInputDeviceList:
https://msdn.microsoft.com/es-es/library/windows/desktop/ms645598%28v=vs.85%29.aspx

2) Registra los dispositivos obtenidos, con la función RegisterRawInputDevices:
https://msdn.microsoft.com/en-us/library/windows/desktop/ms645600%28v=vs.85%29.aspx

3) Intercepta los mensajes de la ventana (WndProc):
https://msdn.microsoft.com/en-us/library/system.windows.forms.control.wndproc%28v=vs.110%29.aspx

4) Espera a que se reciba el mensaje WM_INPUT (0x00FF):
https://msdn.microsoft.com/en-us/library/windows/desktop/ms645590%28v=vs.85%29.aspx

5) Examina el parámetro lParam del mensaje filtrado, el cual contiene una dirección de memoria hacia una estructura RAWKEYBOARD ...debes asignar los datos del bloque de la memoria no administrada hacia una instancia de esa estructura (lo haces con la Class Marshal) para determinar de que teclado proviene la entrada (el input) además de la tecla virtual (vKey) y el tipo de mensaje (WM_KEYDOWN, WM_KEYUP, etc):
https://msdn.microsoft.com/en-us/library/windows/desktop/ms645575%28v=vs.85%29.aspx

6) Evaluas si es el teclado que quieres que sea, y activas un flag booleano en cualquier parte (Dim isPrimaryKeyboard = True), o guardas los datos que quieras para hacer otro tipo de evaluaciones...

7) Cuando se dispare el evento KeyPress en tu event-handler, determinas la cancelación del evento (e.Handled) dependiendo del valor de ese flag, o de dicha evaluación.

8) Vuelta a empezar desde el punto nº4.

Aquí tienes un ejemplo (no lo he probado):
http://www.codeproject.com/Articles/17123/Using-Raw-Input-from-C-to-handle-multiple-keyboard

Saludos
« Última modificación: 17 Abril 2015, 01:02 am por Eleкtro » En línea



kondrag_X1

Desconectado Desconectado

Mensajes: 157


Ver Perfil
Re: Diferenciar eventos según teclado C#
« Respuesta #3 en: 22 Abril 2015, 15:50 pm »

muchisimas gracias ya me había enfrascado en diferenciar las pulsaciones de una maquina con un humano, utilizando estadistica.

pero vuestra proposición parece ser bastante interenteresante

le échare un ojo. Saludos
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Keylogger sin Eventos del teclado
Programación Visual Basic
hackper 1 2,211 Último mensaje 14 Diciembre 2005, 21:48 pm
por Slasher-K
Generar eventos de teclado dentro de un programa desde otro
Scripting
3n31ch 4 3,323 Último mensaje 12 Agosto 2016, 20:31 pm
por Eleкtro
Ayuda con eventos del teclado
Java
sebast345 3 2,569 Último mensaje 18 Noviembre 2016, 13:22 pm
por Orubatosu
Duda manejando eventos de teclado en Java
Java
niano 2 2,340 Último mensaje 11 Julio 2019, 19:04 pm
por niano
Comparar eventos de teclado con strings (C#)
.NET (C#, VB.NET, ASP)
Alejovsq 3 2,965 Último mensaje 9 Agosto 2019, 01:34 am
por Alejovsq
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines