IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB 6 et antérieur Discussion :

Récupérer le handle de contrôles qui ne sont pas atteignables par la souris


Sujet :

VB 6 et antérieur

  1. #1
    Membre du Club
    Inscrit en
    Janvier 2007
    Messages
    82
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 82
    Points : 60
    Points
    60
    Par défaut Récupérer le handle de contrôles qui ne sont pas atteignables par la souris
    Bonjour,


    Un logiciel possède une fenêtre de classe #32770 (Dialog Box, très courant, une sorte de formulaire) qui contient des contrôles identifiés par leur ControlID.
    Il s'agit d'écrire le code pour récupérer le handle de ces contrôles.

    Mais ces contrôles ne sont pas atteignables par la souris tant qu'on n'a pas
    cliqué sur un bouton "Modifier" mis à disposition par le logiciel.
    Et du coup la fonction WindowFromPoint(x,y) que j'utilise sur l'évènement
    OnMouseMove renvoie le handle de la fenêtre #32770 même quand je survole un des contrôles à l'intérieur de la fenêtre Dialog Box : elle ne les "atteind" pas.

    Pourtant, avec le Finder de l'onglet "Window Search" de Spy++, je peux les
    atteindre et Spy++ donne bien leur Handle.

    Quelqu'un sait-il comment faire ?

    Merci beaucoup d'avance.

    Quelqu'un connait-il la solution ? Quelles fonctions API pourrais-je
    utiliser ?

    Merci d'avance.

  2. #2
    Rédacteur
    Avatar de DarkVader
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 130
    Points : 3 118
    Points
    3 118
    Par défaut
    As-tu essayé avec EnumChildWindows ?

  3. #3
    Membre du Club
    Inscrit en
    Janvier 2007
    Messages
    82
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 82
    Points : 60
    Points
    60
    Par défaut Pas moins lourd ?
    Merci beaucoup.

    J'ai compris que grâce à EnumChildWindows je récupère l'ensemble des handles
    des fenêtres filles dès que j'aborde la fenêtre #32770...
    Mais après, comment faire pour que quand le curseur est au dessus de tel
    contrôle, je sache quelle fenêtre fille est concernée : faut-il qu'à chaque
    mouvement de la souris, je balaie l'ensemble des mes fenêtres filles,
    récupère leur rectangle et en compare les coordonnées à celles de la souris
    ? N'est-ce pas un peu
    gourmand comme traitement ? Vois-tu un autre moyen ?

  4. #4
    Rédacteur
    Avatar de DarkVader
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 130
    Points : 3 118
    Points
    3 118
    Par défaut
    Citation Envoyé par olaf_le_preux Voir le message
    Merci beaucoup.

    J'ai compris que grâce à EnumChildWindows je récupère l'ensemble des handles
    des fenêtres filles dès que j'aborde la fenêtre #32770...
    Mais après, comment faire pour que quand le curseur est au dessus de tel
    contrôle, je sache quelle fenêtre fille est concernée : faut-il qu'à chaque
    mouvement de la souris, je balaie l'ensemble des mes fenêtres filles,
    récupère leur rectangle et en compare les coordonnées à celles de la souris
    ?
    Tu parles maintenant de fenêtres filles et de controls ce qui n'était pas le cas dans le post d'origine !
    Tu recherches quoi au final, les handles des controles ou du parent qui le contient ?
    Tu détaillerais un peu plus ton problème qu'il serait plus aisé d'y voir clair - au cas contraire la réponse est spartiate (parfait, c'est ce qui me va le mieux lol ).
    Donc voir du cote de Clienttoscreen qui renvoit les coordonnées lié à un handle.

    Citation Envoyé par olaf_le_preux Voir le message
    N'est-ce pas un peu
    gourmand comme traitement ? Vois-tu un autre moyen ?
    Ton PC carbure au pétrole, au moteur à pédale ou à l'éclair au chocolat ?
    1°) Tu n'es pas obligé d'attendre la fin de l'énumération si tu as trouvé le bon controle
    2°) A toi de coder proprement afin de limiter le nombre d'énumération

    D'autre part, un truc me gêne dans le sujet d'origine c'est
    « ... Mais ces contrôles ne sont pas atteignables par la souris tant qu'on n'a pas
    cliqué sur un bouton "Modifier" mis à disposition par le logiciel. »

    Cela signifie-t-il que tu cherches à effectuer une action volontairement désactivée par l'auteur de l'application ?

  5. #5
    Membre du Club
    Inscrit en
    Janvier 2007
    Messages
    82
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 82
    Points : 60
    Points
    60
    Par défaut Pour Dark Vader
    Tu parles maintenant de fenêtres filles et de controls ce qui n'était pas le cas dans le post d'origine !
    Tu recherches quoi au final, les handles des controles ou du parent qui le contient ?
    Un contrôle est toujours une fenêtre. C'est dans ce sens que je parlais des "fenêtres filles"/controls trouvées par EnumChildWindow.

    Pour ce qui est de la rapidité, en effet, j'avais pensé trop rapidement à un autre traitement qui nécessitait un tableau et cela me paraissait bien lourd...
    Et du coup je crois que j'ai ma solution : je teste dans les jours qui viennent.

    Quant au fait de cliquer sur Modifier, non, ne me mettez pas tout de suite les menottes, je dois juste développer un outil de type finder et cette application est un exemple de ce sur quoi il doit pouvoir tourner.

  6. #6
    Membre expérimenté
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    1 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Argentine

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 173
    Points : 1 418
    Points
    1 418
    Par défaut
    Par contre je suis pas certain de comprendre ce que tu veux dire par "un contrôle est toujours une fenêtre"

    Pourrais-tu détailler?

  7. #7
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 537
    Points
    5 537
    Par défaut
    Bonsoir,

    Dans les applications Windows, en effet, un contrôle est une fenêtre.

    Mais uniquement dans les applications Windows.

  8. #8
    Membre expérimenté
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    1 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Argentine

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 173
    Points : 1 418
    Points
    1 418
    Par défaut


    Bon je vais me documenter là dessus !!! (j'en bave déjà, cela veut dire que tout ce qui est "findwindow" et compagnie fonctionnerait avec une combobox ?!)

    A suivre

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [RegEx] Transformer les liens qui ne sont pas précédé par "
    Par Khleo dans le forum Langage
    Réponses: 0
    Dernier message: 19/12/2012, 18h30
  2. Réponses: 2
    Dernier message: 18/02/2012, 17h56
  3. Réponses: 8
    Dernier message: 10/08/2008, 05h39
  4. Réponses: 4
    Dernier message: 11/07/2006, 21h43
  5. UNION ? des lignes qui ne sont pas prises...
    Par fred23195 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 01/12/2005, 14h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo