Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: elva@vodafone.es en 9 Septiembre 2019, 09:20 am



Título: identificar raton activo
Publicado por: elva@vodafone.es en 9 Septiembre 2019, 09:20 am
Tengo dos ratones conectados a un mismo pc y necesito identificar qué ratón es el que se está moviendo porque depende cual se mueva tengo que hacer unas cosas u otras.
Trabajo en c# con visual studio 2017.
Gracias


Título: Re: identificar raton activo
Publicado por: Eleкtro en 19 Septiembre 2019, 05:09 am
Mediante la infraestructura RAW_INPUT de Windows puedes enumerar los múltiples dispositivos de entrada de teclado y ratón conectados, y registrarlos para la escucha de eventos de entrada del dispositivo en cuestión, lo que te servirá para determinar si el ratón se ha movido o no, o el botón presionado.

La implementación de esta solución se debe tomar con paciencia, ya que si uno carece de experiencia (y esto lo digo por experiencia propia, ya que todos hemos aprendido a hacer las cosas desde cero) va a requerir bastante investigación para documentarse, además de conocimientos básicos de Platform Invocation (P/Invoke) en .NET, y la escritura de bastante código, por lo que probablemente se necesite pasar por una tediosa etapa de resolución de dudas y varias más de ensayo y error hasta finalizar la implementación y verificar que todo funciona como es debido.

Si piensas implementarlo por ti mismo, entonces lee la documentación sobre la estructura RAWINPUTDEVICE (RAWMOUSE), funciones RegisterRawInputDevices, GetRawInputDeviceList, GetRawInputDeviceInfo y GetRawInputData...

https://docs.microsoft.com/en-us/windows/win32/inputdev/raw-input?redirectedfrom=MSDN

De todas formas recuerdo que se pueden encontrar muchos ejemplos en el buscador de Google, además de muchos proyectos/aplicaciones/librerías en Github, de donde podrías extraer la mayor parte (sino toda) de la implementación en C#, o en el mejor de los casos utilizar una librería sin mayor dificultad que aprender a usar sus miembros. Y hablando de librerías, todo esto lo tengo implementado en mi librería comercial DevCase (abajo en mi firma de usuario) pero no puedo mostrar el código precisamente por que es un producto comercial (y para ser honestos, también por que son bastantes clases/estructuras y no me apetece perder tiempo en andar cortando/extrayendo tanto código para publicarlo).

Saludos.