Enviando un clic de mouse a un botón en la barra de tareas usando C#


7

En una aplicación en la que estoy trabajando actualmente, un requisito es traer una ventana de una aplicación externa al primer plano. Hacer llamadas de la API de Win32 como la ventana BringWindowToTop y SetForeground no funciona todo el tiempo. Esto se debe a algunas restricciones dentro de Windows XP. Lo que me gustaría hacer en su lugar es enviar simular un clic con el mouse en el botón de la ventana en la barra de tareas que espero que traiga la ventana al frente. ¿Alguien sabe cómo esto es posible?

5

Consulte la sección "Cómo robar el foco en 2K/XP" en http://www.codeproject.com/KB/dialog/dlgboxtricks.aspx, ya que esto es exactamente lo que necesita. No iría a la ruta de la barra de tareas ya que la barra de tareas podría estar oculta o simplemente no estar allí.


2

Es posible. Pero es extremadamente incompleto. Su aplicación también puede romperse con la próxima versión de Windows, ya que no está documentada. Lo que necesita hacer es encontrar el identificador de ventana de la barra de tareas, luego buscar el identificador de ventana de la ventana secundaria que representa el botón, y luego enviarle un mensaje WM_MOUSEDOWN (Creo).

Aquí hay un poco en encontrar el identificador de ventana de la barra de tareas:

http://www.codeproject.com/

Fwiw, las restricciones a BringWindowToTop/setForeground están allí porque es irritante cuando una ventana se centran robos. Eso puede no importar si trabajas en un entorno corporativo. Solo téngalo en cuenta. :)


1

Lo usé en un programa donde necesitaba simular clics y movimientos del mouse;

Global Mouse and Keyboard Library


1

Para ser honesto, nunca he tenido un problema con lo que una ventana al primer plano en XP/Vista/2003/de 2000.

usted necesita para asegurarse de que haga lo siguiente:

  1. Comprobar si IsIconic (minimizado)
  2. Si # 1 da como resultado cierto, entonces llaman ShowWindow pasar SW_RESTORE
  3. Entonces llame SetForegroundWindow

Nunca he tenido problemas que pueda pensar en hacerlo con esos pasos.