Pregunta

Estoy codificar hasta un programa para la prueba automatizado que hace clic al azar una ventana de aplicación abierta utilizando diversas llamadas a las bibliotecas de User32.dll. Mi problema actual es esto, si un clic abriría un cuadro de diálogo, utilizando Process.WaitForInputIdle () no esperar el tiempo suficiente para que el diálogo sea detectado el siguiente viaje alrededor del circuito, lo que significa unos cuantos clics consiguen con claves y si esos clics resultan estar en algo en el cuadro de diálogo que quiero evitar (digamos un botón de salida) no hay forma de saber que de antemano. Mi pregunta es la siguiente. ¿Hay una manera de esperar a que el proceso o subproceso finalizar todo el proceso y sólo estar esperando en el bucle de mensaje de nuevo?

Espero que tuviera sentido.

Saludos

Ross

editar

De no ser así, ¿sería posible de alguna manera para establecer el proceso / roscas del programa de destino y mi programa a ambos utilizan el mismo procesador y ajustar los prioritorys de cada uno para que el programa de destino recibe preferencia?

¿Fue útil?

Solución 2

La forma de evitar esto parece es utilizar la API de SendMessage en lugar de la API o mouse_event SendInput. La razón de esto es que SendMessage bloques hasta que se haya procesado. Sólo asegúrese de que siempre obtenga el identificador de la ventana inmediatamente debajo de donde desea hacer clic (usando WindowFromPoint) y convertir las coordenadas del ratón de pantalla en coordenadas de cliente mediante ScreenToClient. Empacar las coordenadas en el parámetro lParam usando ((pt.Y << 16) + pt.X). Esto bloqueará hasta que procesan y por lo que cualquier diálogos modales muestran bloqueará esta llamada.

Otros consejos

WaitForInputIdle desafortunadamente volver tan pronto como la aplicación está en un bucle de mensajes sin mensajes de entrada de espera.

Si es el propietario del código para el cuadro de diálogo, que podría tener el SetEvent llamada de diálogo en su WM_INITDIALOG para señalar su automatización que está listo para la prueba. Como alternativa, puede buscar en el uso SetWinEventHook sobre el proceso y esperar a que el diálogo para realmente ser creado antes de enviar los eventos de entrada a la misma.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top