texto - ¿Cómo pasar eventos de mouse a aplicaciones detrás de la mía en C#/ Vista?
mousemove visual basic (3)
Estoy escribiendo una aplicación muy especializada en C # que flota como una ventana en su mayoría transparente en todo el escritorio. Quiero ser capaz de crear y pasar eventos de mouse a aplicaciones detrás de las mías, y hacer que parezcan funcionar "normalmente", respondiendo a esos eventos. También sería preferible si el administrador de ventanas pudiera responder.
No soy un gurú de Windows, y no estoy seguro de cómo lograrlo.
Desde esta página: http://bytes.com/forum/thread270002.html
parece que mouse_event sería bueno, excepto que dado que mi aplicación está flotando sobre todo lo demás, supongo que los eventos generados nunca llegarán a las otras aplicaciones.
Parece que la alternativa es SendMessage, pero eso requiere una buena cantidad de manipulación manual de Windows, y los eventos del mouse generados no son "auténticos".
¿Alguna idea sobre la mejor manera de abordar esto?
Después de mirar los ganchos del sistema y otras soluciones de bajo nivel encontré un método mucho más simple.
Primero, configure TransparencyKey y BackColor del formulario para que sean iguales. Esto no me hizo ninguna diferencia visual ya que mi formulario ya era visualmente transparente, pero esto ayudará a dejar pasar los eventos del mouse.
En segundo lugar, el siguiente código permitirá que los eventos del mouse "caigan" a través de su formulario.
protected override CreateParams CreateParams
{
get
{
CreateParams createParams = base.CreateParams;
createParams.ExStyle |= 0x00000020; // WS_EX_TRANSPARENT
return createParams;
}
}
Por último, configure TopMost para que sea verdadero.
Su formulario ahora flotará sobre todo visualmente, pero abandonará el enfoque para todas las demás aplicaciones.
Parece que quieres hacer algo como filtrar la entrada del usuario.
Tal vez solo necesitas un gancho para teclado / mouse.
Quizás quieras echarle un vistazo a la API de Windows llamada SetWindowsHookEx.
También debería haber suficientes muestras de cómo hacer eso en C # disponible, lo primero que encontré fue este enlace (tal vez no sea el mejor artículo, pero debería darle la idea).
Si deshabilita el control y regresa, puede pasar el evento MouseDown al padre.