J'ai une application Delphi qui tente d'ouvrir une webcam. Sous Windows 7 it fails de temps en temps (c'est une autre histoire/question/thread) mais le pilote de la webcam apparaît également une boîte de dialogue intitulée "Video Source" m'invitant à en sélectionner un. Si j'essaie d'ouvrir le pilote à plusieurs reprises en boucle et que je ferme manuellement la boîte de dialogue à chaque fois qu'elle apparaît, je peux y arriver. Donc, je voudrais fermer la boîte de dialogue de mon application. Un FindWindow (nil, 'Video Source') ne le trouve pas. Si je regarde avec l'explorateur de processus la boîte de dialogue est montrée comme appartenant à mon application. Si je force la fermeture de PE cela ferme mon application! Comment fermer cette boîte de dialogue? J'ai un soupçon (confirmé) que mon application est suspendue alors que cette boîte de dialogue est ouverte, ce qui rend très difficile l'exécution de tout code pour fermer la boîte de dialogue.obtenir une application Delphi pour fermer une boîte de dialogue qui a surgi d'un pilote
Répondre
Si votre thread d'application principal est bloqué en attente d'une entrée de l'utilisateur en raison de cette boîte de dialogue contextuelle, la seule solution est d'avoir un autre thread qui tente régulièrement de localiser ce popup. Quand il le trouve, alors utilisez PostMessage pour utiliser un WM_CLOSE ou similaire à la poignée contextuelle. Vous devrez peut-être envoyer des messages mousedown/mouseup au bouton de la fenêtre contextuelle. En outre, j'écrirais une petite application de débogage qui utilise Windows API WindowFromPoint pour découvrir la fenêtre contextuelle, c'est-à-dire. pas seulement une légende visible mais aussi une classe. Vous pouvez également utiliser ce programme de débogage pour que FindWindow fonctionne correctement.
- 1. Fermeture de la boîte de dialogue et du formulaire qui a lancé la boîte de dialogue
- 2. Bonne façon de fermer une boîte de dialogue
- 3. Boîte de dialogue personnalisée Android fermer
- 4. Comment créer une boîte de dialogue dans une application iphone
- 5. Pour fermer ou ne pas fermer: une application de dialogue lorsque vous appuyez sur "Echap"
- 6. Comment fermer une boîte de dialogue à partir d'un lien personnalisé à l'intérieur de la boîte de dialogue
- 7. Boîte à outils Dojo: fermer la boîte de dialogue
- 8. jQueryUI: un lien qui ouvre une boîte de dialogue
- 9. Ignorer une boîte de dialogue système sur BlackBerry
- 10. comment fermer, fermer une application WPF lorsque l'utilisateur a besoin de le fermer
- 11. Une bonne boîte de dialogue "À propos"
- 12. Comment fermer une application?
- 13. La boîte de dialogue Fermer provoque trop de récursion
- 14. Obtenir une valeur pour un rapport via une boîte de dialogue, MS Access
- 15. Fermer boîte de dialogue modale du filet extérieur - C#
- 16. Fermer Boîte de dialogue jQuery UI de Iframe
- 17. Est-ce qu'une fenêtre a une place pour l'image d'arrière-plan comme une boîte de dialogue?
- 18. Fermer une boîte de dialogue jQuery UI d'un élément à l'intérieur de celle-ci?
- 19. Comment afficher une boîte de dialogue après que le thread a rencontré une exception non interceptée?
- 20. ListView ouvrir une boîte de dialogue (ou une boîte de dialogue d'alerte)
- 21. jquery comment obtenir le bouton qui a ouvert la boîte de dialogue
- 22. A propos Gtk Boîte de dialogue Comportement
- 23. VB.NET: Comment fermer et rouvrir une boîte de dialogue dans ce cas?
- 24. Comment fermer jQuery Dialog dans la boîte de dialogue?
- 25. Scripty2: comment fermer dialogue
- 26. Comment fermer (masquer) une boîte de dialogue FBML en utilisant le nouveau SDK JavaScript de Facebook?
- 27. Comment fermer la boîte de dialogue ouverte par showModalDialog?
- 28. Comment imprimer une boîte de dialogue ou une fenêtre Qt?
- 29. Restriction de GetFocus à une boîte de dialogue et/ou une application spécifique
- 30. Actualiser UpdatePanel après une boîte de dialogue "File Download" Boîte
Vous pouvez également utiliser WinSpy ou Spy ++ pour obtenir des informations à son sujet, y compris sa classe. Pas besoin d'écrire votre propre application pour le faire. –
Le thread principal était bloqué mais les événements du temporisateur étaient toujours déclenchés. A écrit un rapide et sale pour énumérer toutes les fenêtres et sur la base de ce que j'ai appris j'ai ensuite ajouté 1 sec minuterie de routine à mon application qui cherchait class = '# 32770' et title = 'Video Source', puis émis un WM_CLOSE. Cela en conjonction avec une boucle pour réessayer l'ouverture m'a fait aller, mais ce n'est pas très joli. Semble être un problème connu avec Windows 7. – rossmcm