Si j'ai un contrôle Winforms, est-il possible de dire s'il y a des fenêtres (de n'importe quelle application) au-dessus? Fondamentalement, j'ai besoin de savoir quelles parties de mon contrôle sont réellement visibles à l'écran.Comment puis-je savoir s'il y a des fenêtres au-dessus d'un contrôle?
Répondre
Si vous êtes satisfait de P/Invoke, la fonction EnumWindows énumère toutes les fenêtres de niveau supérieur donnant un HWND; à partir de cela, vous pouvez obtenir le rectangle non-client (GetWindowRect) à comparer avec les limites de votre formulaire. Cela ne tient pas compte des fenêtres avec des zones opaques non rectangulaires (peaux fantaisie pour les lecteurs multimédias et autres), de sorte que vous pouvez obtenir des faux positifs pour une telle fenêtre en masquant votre contrôle.
Dans l'API Win32, vous pouvez utiliser WindowFromPoint pour déterminer la fenêtre la plus élevée à un point donné. Cela ne vous dira pas si tout votre contrôle est visible, mais si vous testez les 4 coins, cela vous donnera de bonnes chances.
En fait, j'ai besoin de savoir exactement ce qui est visible, donc si la moitié de mon contrôle est visible, je dois le savoir exactement. – NotDan
Pourquoi voulez-vous cette information? Généralement, lorsque les gens posent cette question, c'est parce qu'ils veulent s'assurer que leur interface utilisateur est au premier plan si ce n'est pas le cas. Et c'est généralement ce qui se passe juste avant qu'ils n'essaient de détourner l'attention de l'application. a le premier plan.
Et le vol de premier plan est très, très, très mauvais. Les gens sont vraiment vexés lorsque les applications volent la vedette. Cela dit, l'une ou l'autre des deux techniques ci-dessus fonctionnerait - je pense que je préférerais la technique EnumWindows/GetWindowRect/IntersectRect dans la réponse de Steve Gilham.
- 1. Comment savoir quand il y a trop de connexions SQL?
- 2. Comment savoir s'il y a des données à faire défiler dans Quantum Grid 5?
- 3. Y a-t-il un moyen de savoir si un email a été ouvert?
- 4. Comment savoir pourquoi renameTo() a échoué?
- 5. Dossier svn perdu il y a quelque temps .. comment puis-je savoir quelle révision l'a?
- 6. Comment savoir si ma winform est au-dessus des autres fenêtres de C#?
- 7. wpf savoir quand le modèle a changé
- 8. Comment savoir ce qui a été cliqué?
- 9. Il y a des chaînes en C++?
- 10. Il y a des paramètres nommés, puis
- 11. Meilleur contrôle sur les fenêtres Emacs
- 12. Comment savoir ce que UITextField a causé une UIKeyboardWillShowNotification?
- 13. Comment savoir quel module de formulaire a appelé votre classe
- 14. Comment puis-je savoir quel contrôle a le focus dans Windows Forms .NET?
- 15. Comment savoir quelle fenêtre a le focus et comment la changer?
- 16. Comment savoir quelle touche SHIFT a été enfoncée?
- 17. MessageWindow - Comment puis-je savoir s'il a été détruit?
- 18. Flex: Comment savoir si TextArea a le curseur clignotant
- 19. @Secured() Y a-t-il des instructions sur le journal ...?
- 20. Comment savoir quel contrat a échoué avec contract.py de Python?
- 21. Y at-il un moyen de savoir quel élément a le focus dans une application WPF?
- 22. Y a-t-il un moyen de savoir qui détient une référence à un objet?
- 23. Comment savoir si un formulaire a été modifié
- 24. Comment exécuter PartCover dans des fenêtres x64
- 25. Y a-t-il des projets open source dans D?
- 26. Comment savoir quel compilateur a été utilisé: g77 ou gfortran
- 27. Comment savoir quelle fonction de hachage a été utilisée?
- 28. Comment savoir si un contrôle est actuellement invalide?
- 29. Problèmes IWebBrowser2 - comment ouvrir des documents dans de nouvelles fenêtres?
- 30. Y a-t-il quelque chose que l'on appelle des applications auto-exécutables?
Je pense que cela fonctionnera ... – NotDan