Simule el movimiento / clic / tecla del mouse en una aplicación que no esté activa
Pregunta
Sé cómo simular eventos de mouse y teclado, pero actúan como si el usuario los hubiera hecho, por lo que afectarán a la ventana que está activa. Lo que necesito es simular una de esas entradas, pero en una ventana que no está activa.
No estoy diciendo que esté minimizado, imagina, por ejemplo, que tienes msPaint y el bloc de notas. Bloc de notas está en frente de la pintura. Y desea simular los clics del mouse en ciertas coordenadas de la ventana de pintura, pero sin activarla, es posible que el usuario siga utilizando el bloc de notas que está frente a la pintura.
¿Es esto posible? Gracias!
Solución
Puedes hacer lo siguiente:
1) obtenga el HWND
de la ventana dentro de la cual desea simular eventos. Para hacer esto, puede usar la función FindWindow
, que toma dos parámetros, uno es el nombre de clase de la ventana (puede usar NULL
) y el otro el nombre del ventana (consulte la documentación de MSDN para obtener más información);
2) envíe un mensaje a la ventana deseada utilizando la función SendMessage
. Los parámetros son: el identificador de ventana obtenido anteriormente ( HWND
), el mensaje (que puede ser, por ejemplo, WM_KEYDOWN
, o WM_MOUSEMOVE
, WM_LBUTTONDOWN
etc.), el WPARAM
del mensaje (que en el caso de WM_KEYDOWN
es el código de clave virtual de la clave) y, finalmente, el LPARAM
del mensaje (que en el caso de WM_KEYDOWN
es bastante complejo y debe consultar MSDN para obtener más información).
En mi opinión, esto es suficiente para lo que pretende hacer.
Otros consejos
Bueno, si supieras JAVA, podrías usar la clase de robots.
Esta clase se utiliza para generar eventos de entrada nativos del sistema para fines de automatización de pruebas, demostraciones de ejecución automática y otras aplicaciones donde se necesita el control del mouse y el teclado
¿Quizás hay algo similar en .net?