2009-12-10 6 views
2

Je travaille sur une application qui imprime un rapport en utilisant le pilote Microsoft XPS Document Writer. Si l'utilisateur tente d'écraser un fichier ouvert, le pilote affiche une boîte de dialogue d'erreur que l'utilisateur n'a pas le droit d'enregistrer. Cependant, sur la machine d'un QA, la boîte de dialogue n'apparaît jamais. Je souhaite que l'application affiche sa propre boîte de dialogue d'erreur, mais uniquement si la boîte de dialogue d'erreur du pilote ne s'affiche pas. Comment puis-je détecter si la boîte de dialogue d'erreur du pilote est apparue?En C# .Net, comment détecter si une boîte de dialogue apparaît?

Répondre

1

Ne laissez pas l'erreur se propager si loin?

Demander le nom du fichier, détecter sa (non) existence, montrer votre propre erreur, transmettre le document à l'imprimante.

+0

L'invite de fichier est déjà exécutée dans le pilote de document Microsoft XPS. Par conséquent, je ne peux pas demander manuellement un fichier et le transmettre. – ATDev

1

Je ne pense pas que ce soit quelque chose que vous pouvez obtenir à 100%. À l'exception de certaines API que vous ne connaissez pas, la seule façon de savoir si la boîte de dialogue est apparue est de filtrer les scrap. C'est-à-dire, regardez l'ensemble des fenêtres actives et voyez si le titre/message indique que la boîte de dialogue d'erreur est apparue.

Cette approche a cependant plusieurs problèmes. Le premier est qu'il génère des faux positifs. Vous pourriez être trompé par un dialogue similaire avec un nom similaire.

De même, il n'y a aucune garantie que votre code serait exécuté avant que l'utilisateur ne ferme la boîte de dialogue. Par conséquent, vous pourriez finir par décider que la boîte de dialogue ne s'affichait pas dans les cas où elle l'était réellement.

Questions connexes