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=MSDNDe 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.