c# - inputsimulator - global send keys
Simular la entrada en la pantalla de inicio de sesiĆ³n de Windows, utilizando un controlador (2)
Estoy escribiendo una herramienta de escritorio remoto de código abierto, similar a VNC y TeamViewer. Me di cuenta de que TeamViewer continúa capturando la pantalla en la pantalla Cambiar usuarios o Estación de trabajo bloqueada, y permite que el usuario remoto escriba la contraseña y desbloquee la estación de trabajo. Quiero hacer lo mismo.
He leído:
Actualizado: interactuando con el usuario en la pantalla de inicio de sesión de Windows
https://stackoverflow.com/questions/9485530/capturing-image-during-windows-logon-invalid-contraseña
Agregar botón de comando a la pantalla de inicio de sesión de Windows
Enganchar una tecla de acceso rápido desde la pantalla de inicio de sesión de Windows
Controlador para simular Keypress
Eliminar la pantalla de inicio de sesión de Windows a través de un servicio
Cómo atrapar una clave en la pantalla de inicio de sesión de Windows 7?
Visualización de la ventana en la pantalla de inicio de sesión con C # en Windows XP
De estas publicaciones, he deducido que la entrada de simulación en una sesión aislada definitivamente no es una simple llamada a SendInput (). Pero, ¿es posible usar un controlador (creo que es específicamente un controlador de filtro de teclado, pero no estoy seguro)? Si es así, estoy pensando en escribir, en C #, un servicio (para que se ejecute fuera de la sesión del usuario) que interactúe con el controlador de interceptación para simular pulsaciones de teclas.
En respuesta a: "¿por qué no lo intentas?", Todavía no hay un contenedor .NET para Interceptar que pruebe ese servicio, y si el consenso general llega a la conclusión de que esto no es posible, no quiero perder el tiempo escribiendo ese .NET wrapper.
Encontré un controlador de teclado llamado Interceptación (que se lanzará de código abierto en el futuro) . Aquí puede encontrar directamente la fuente (la fuente es solo la envoltura de la API de comunicación C que rodea el controlador del núcleo real) .
Otra pregunta que tengo ... Estoy confundido sobre qué archivos componen un controlador. Su biblioteca DLL de interceptación programada en C compila a .DLL. Pero no son controladores de alguna extensión .sys, ¿cómo compilaría esa DLL de interceptación en un controlador real ?, y ¿cómo la instalaría?
EDITAR: existe un contenedor .NET . Modifiqué la aplicación de consola de muestra para escribir toda la contraseña cuando presioné la tecla ''x'', y funcionó con éxito, no solo en la pantalla bloqueada de la estación de trabajo, sino también en la pantalla de inicio de sesión de Windows. Entonces funciona
Editar: la biblioteca de contenedor C # para este controlador de teclado está aquí .
Actualmente, los controladores reales no son de código abierto. El instalador del controlador los instala (keyboard.sys y mouse.sys), lo que es código abierto es solo la API de comunicación con ellos. Estoy planeando una reescritura de los componentes del kernel antes de abrirlo también.
Para otras personas interesadas en la respuesta: sí, funciona.
Use el contenedor .NET para el controlador de teclado Interception que se encuentra en https://github.com/candera/kchordr , y juegue. Reemplazará las claves incluso en la pantalla de inicio de sesión de Windows.