Question

Je suis le codage d'un programme pour les tests automatisés qui clique au hasard une fenêtre d'application ouverte en utilisant différents appels de bibliothèque User32.dll. Mon problème actuel est cela, si un clic ouvrirait une boîte de dialogue, à l'aide Process.WaitForInputIdle () ne pas attendre assez longtemps pour que cette boîte de dialogue à détecter le prochain voyage autour de la boucle, ce qui signifie que plusieurs clics s'indicé et si ces clics se trouvent être sur quelque chose dans la boîte de dialogue que je veux éviter (dire un bouton de sortie) il n'y a aucun moyen de dire à l'avance. Ma question est la suivante. Est-il possible d'attendre le processus ou de fil pour terminer tous les traitements et seulement attendre dans la boucle de nouveau message?

J'espère que du sens.

Vive

Ross

EDIT

A défaut, serait-il en quelque sorte possible de définir le processus / threads du programme cible et mon programme à la fois utiliser le même processeur et d'ajuster les prioritorys de chacun afin que le programme cible obtient la préférence?

Était-ce utile?

La solution 2

La façon de contourner cela il semble est d'utiliser l'API SendMessage au lieu de l'mouse_event ou API SendInput. La raison est que les blocs SendMessage jusqu'à ce qu'il ait été traité. Assurez-vous que vous obtenez toujours la poignée de la fenêtre sous laquelle vous immediat voulez cliquer (en utilisant WindowFromPoint) et convertir coordonnées de la souris de l'écran pour coords client à l'aide ScreenToClient. Emballer les coordonnées dans le paramètre lParam en utilisant ((pt.Y << 16) + pt.X). Cela va bloquer jusqu'à traiter et ainsi les boîtes de dialogue modales affichés bloquera cet appel.

Autres conseils

WaitForInputIdle retourne malheureusement dès que l'application est dans une boucle de message sans message d'entrée en attente.

Si vous possédez le code de la boîte de dialogue, vous pourriez avoir la SetEvent d'appel de dialogue dans son WM_INITDIALOG pour signaler votre automatisation qu'il est prêt à être testé. Sinon, vous pouvez envisager d'utiliser SetWinEventHook sur le processus et attendre que la boîte de dialogue à créer réellement avant l'envoi d'événements d'entrée à elle.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top