[Ce code est appelé à partir du gestionnaire d'événements Inspector.Activate
(premier appel), soit juste avant la fenêtre de l'inspecteur est effectivement montré.]Comment déterminer de manière fiable le handle de fenêtre d'une fenêtre d'inspecteur Outlook donnée avec WordMail activé à partir d'un COM-Addin (Outlook <= 2003)?
Pour les inspecteurs de courrier « natifs » Je peux simplement QI l'interface Inspector
-IOleWindow
et appel sa méthode GetWindow
. Toutefois, cela ne fonctionnera pas pour les inspecteurs Word qui sont en fait des instances de Word avec une barre d'outils spéciale et n'implémentent pas IOleWindow
.
(temporairement) Inspector.Caption
définir une valeur unique et puis la recherche d'une fenêtre avec cette légende ne fonctionne pas non plus car l'accès à la plupart des propriétés du Inspector
n'a aucun effet (immédiat) sur la fenêtre inspecteur réelle lors de l'utilisation de l'option WordMail . Le fait d'appeler Activate
et d'interroger immédiatement le GetForegroundWindow
ne fonctionne pas de manière fiable: lorsque plusieurs inspecteurs sont déjà ouverts ou lorsque des fenêtres Word sont présentes, cela renvoie souvent l'instance «la plus ancienne» au lieu de la plus récente.
J'ai essayé un certain nombre d'autres approches au cours des années, mais elles se sont toutes révélées être défectueuses d'une manière ou d'une autre. Y a-t-il une solution modérément simple ou devrais-je adopter une approche beaucoup plus élaborée comme garder ma propre liste de poignées de fenêtres connues via un hook système et essayer de les faire correspondre aux inspecteurs connus? (P Daddy pour l'indice sur l'utilisation de crochets CBT)
J'ai essayé cette approche, mais EnumWindows n'a pas du tout retourné la fenêtre de messagerie (OpusApp). Avez-vous déjà trouvé une meilleure solution? Si non, comment avez-vous implémenté le code pour obtenir la fenêtre? – Moox
@Moox: Quand appelez-vous 'EnumWindows'? Je ne fais rien de spécial ici. Je posterai des extraits plus tard. –
@Moox: J'ai ajouté un extrait de code à ma réponse, maintenant. S'il vous plaît prendre note de la note ci-dessous l'extrait concernant les circonstances très restreintes dans lesquelles je m'en sers. –