Estoy intentando automatizar la GUI de una aplicación externa usando C# /. NET 4.0¿Determina si una aplicación está bloqueada/ocupada?
La aplicación que se está automatizando (AUT) es una aplicación VB6.
Al hacer una acción, o hacer clic en un botón, el AUT a veces pasa mucho tiempo esperando que el DB responda. Cuando la aplicación está esperando los resultados de la base de datos, la aplicación está inactiva (no registra mucho uso de CPU), pero está bloqueada (no puede hacer clic o interactuar con ella).
-Hasta ahora, he intentado mirar el puntero del mouse (reloj de arena) como indicador, pero a veces la aplicación está bloqueada pero el cursor es normal. Entonces esto no es confiable.
-He intentado mirar el proceso principal de AUT para TotalProcessorTime (esto mide si la aplicación está inactiva o OCUPADA), pero como he dicho, a veces la aplicación está inactiva, y todavía está bloqueada.
Así que me gustaría ponerle cinta adhesiva a la experiencia de la multitud de stackOverflow para ver si alguien ya sabe cómo manejar eso, y/o si tiene alguna idea sobre cómo lograr esto.
Gracias
EDIT:
He estado jugando alrededor, y acaba de descubrir algo.
Mientras que la AUT está bloqueada, no responde a la entrada del teclado o del mouse. Sin embargo, si envío mensajes WM_LBUTTONCLICK a la ventana, puedo confirmar que los mensajes se están procesando (y la IU cambia).
Así que supongo que están bloqueando a propósito la aplicación mientras hacen llamadas a la base de datos.
¿Está la interfaz de usuario deshabilitada? ¿El bloqueo de subprocesos de la interfaz de usuario principal es un hilo de trabajo? ¿Ves la ventana fantasma si intentas interactuar con la aplicación? –
No puede interactuar con la interfaz de usuario principal, sin embargo, no creo que el hilo de la interfaz de usuario principal sea bloqueante, ya que no ve ningún "efecto fantasma" cuando intenta interactuar con él. Simplemente no hace nada. Y todos los controles/UI todavía están "habilitados". – DanyO
Consulte con Spy ++ si la ventana principal está desactivada o no. Si la cola de mensajes está siendo bombeada y no puede invocar acciones de UI, entonces algo en AUT debe estar deshabilitado, supongo. –