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

Windows Discussion :

Handle du controle cliqué par la souris


Sujet :

Windows

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 31
    Points : 14
    Points
    14
    Par défaut Handle du controle cliqué par la souris
    Je parle ici d'un clic écran... pas spécifiquemement sur un "objet" dans une fenêtre de mon application en cours ( car dans ce cas c'est trivial... )

    Comment retrouver ce handle précisément ?
    P1 étant les coordonnées écran du point cliqué...
    WindowFromPoint ( P1 ) n'est pas satisfaisant dans tous les contextes
    Cela retourne le handle de la fenêtre qui contient ce point.
    Parfois je retrouve bien l'objet que je cherche par exemple un "bouton" mais dans bien des autres cas j'obtiens une "fenêtre antérieure, un panel, voir la fiche entière.

    J'ai fait des tas d'essais notamment ...
    J'initialise avec WindowFromPoint ( P1 ) puis après avoir converti ce point en coordonnées de la fenêtre client donnée en réponse j'interroge à l'aide de la fonction ChildWindowFromPointex ...

    Il y a certainement une méthode cohérente pour obtenir "La bonne réponse" puisque Windows le fait ... mais j'ai beau checher je ne trouve ni une fonction ni un méthode pour y parvenir ...

    Ne voulant pas mourir bête je pose la question pour "si des fois que y'aurait kékun" de moins "coincé du neurone que moi" et qui saurait faire ...

    merci d'avance...

  2. #2
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    Bah, RealChildWindowFromPoint

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 31
    Points : 14
    Points
    14
    Par défaut
    Citation Envoyé par Melem Voir le message
    Bah, RealChildWindowFromPoint
    Tiens connaissais pô celle là !
    Normal ... d'ailleurs vu qu'elle existe pô dans le fichier d'aide Windows que j'ai ...
    J'aurais eu du mal à la trouver ...

    Faudra que je songe vite à réactualiser cette aide.... doit commencer à dater ma mienne...

    Donc merci pour l'info ...
    J'va vérifier si ça me donne des résults plus précis...

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 31
    Points : 14
    Points
    14
    Par défaut
    Après tests...

    Handles := WindowFromPoint ( P1 ) ;
    ScreenToClient ( Handles , P1 ) ;
    HD := RealChildWindowFromPoint ( Handles , p1 );

    et

    Handles := WindowFromPoint ( P1 ) ;
    ScreenToClient ( Handles , P1 ) ;
    HD := ChildWindowFromPointex ( Handles , P1, CWP_ALL ) ;

    Donnent des réponses très équivalentes ...
    Ce qui me parait kekpart logique car je viens de lire un article sur la commande RealChildWindowFromPoint ...
    Et il semble qu'elle appelle ChildWindowFromPointex .... avec CWP_SKIPTRANSPARENT ...

    En résumé j'obtiens donc toujours pas le handle cherché...
    Si le point donné est dans une fenêtre enfant cela semble être bon ...
    mais si le point est sur la fénêtre principale de l'appli cela me renvoit la fenêtre et non pas le bouton ( par exemple ) cliqué

  5. #5
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    Attends un peu, je me perds dans ce que tu veux vraiment faire. La doc dit :
    Citation Envoyé par MSDN
    The RealChildWindowFromPoint function retrieves a handle to the child window at the specified point. The search is restricted to immediate child windows; grandchildren and deeper descendant windows are not searched.

    ...

    RealChildWindowFromPoint treats HTTRANSPARENT areas of a standard control differently from other areas of the control; it returns the child window behind a transparent part of a control. In contrast, ChildWindowFromPoint treats HTTRANSPARENT areas of a control the same as other areas. For example, if the point is in a transparent area of a groupbox, RealChildWindowFromPoint returns the child window behind a groupbox, whereas ChildWindowFromPoint returns the groupbox.
    Désolé mais y a pas d'autres fonctions à part ces deux là (ChildWindowFromPointEx etc. mais c'est pas vraiment ça ...).

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 31
    Points : 14
    Points
    14
    Par défaut
    Trop marrant ...

    En cherchant sur Google la commande RealChildWindowFrom Point....
    Je suis tompé sur l'un de tes tutoriels je pense ...
    http://melem.developpez.com/win32/wi...page=controles

    Super tuto d'ailleurs ... Bravo !...
    En lisant le commentaire que tu as mis sur les commandes ChildWindowFromPoint et ChildWindowFromPointEx ... cela m'a mis la puce à l'oreille ...
    je me suis dit que ChildWindowFromPoint conviendrait mieux pour cibler ma quête ...
    Et effectivement la réponse me semble ultra satisfaisante dans tous les cas ...

    Donc si y'en a des qui ont le même besoin : Obtenir le Handle du TWinControl cliqué à l'écran...
    La solution semble être :

    GetCursorPos ( P1 ) ;
    Handles := WindowFromPoint ( P1 ) ;
    ScreenToClient ( Handles , P1 ) ;
    HD := ChildWindowFromPoint ( Handles , P1 );

    --------------------------------------------------------->
    Légères appartés...

    1. Cela sera-t-il mal pris si je fais remarquer qu'il est bien plus aisé et précis de trouver des réponses dans "l'absolu des posts et Faqs" de developpez.com en utilisant les moteurs de recherche de Google pluto que l'outil de recherche du site ?

    2. Pour me défouler des contraintes du développement professionel ( logiciels de gestion de commerce ) et continuer à apprendre librement, je suis en train d'écrire une "Suite de programmes" pour la gestion des images...

    Cette suite comprend déjà
    1. un module de gestion du stockage ( type ce que fait ACDSee )
    ( + gestion de collections (albums ), Diaporama ...etc.
    2. un module de gestion des fonds d'écrans de l'ordi ( avec fond d'écran changeant toutes les x minutes ( sur la base d'une collection )
    3. un module de dessin ... en cours d'écriture mais avec déjà kekfonctions comme par exemple, le recadrage, correction des yeux rouges, réglages colorimétriques ... etc.
    4. un outil de capture de couleur à l'écran (pratique pour les devs) avec 3 options de formats de notation ... Hexa, Delphi ou RGB
    5. un outil de capture écran ( bureau, Fenêtre active, zone à sélectionner et Objet à sélectionner )
    ( c'est d'ailleurs pour la capture objet que je posais ma question ... :-)

    Est-ce que sur ce forum y'a un endroit dédié à la mise en ligne de nos oeuvres de jeunesse ? :-) ( j'ai 59 ans )
    Histoire de les partager et pourquoi pas de rendre service ou de faire plaisir ?

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

Discussions similaires

  1. [AC-2010] Récupérer le nom du controle survolé par la souris
    Par Jeannot45 dans le forum VBA Access
    Réponses: 3
    Dernier message: 25/04/2014, 07h51
  2. [Débutant] recupere la cellule d'un GridView cliqué par la souris
    Par sak_ura dans le forum ASP.NET
    Réponses: 8
    Dernier message: 27/09/2012, 00h42
  3. Récupérer le control pointé par la souris
    Par Cedric33 dans le forum C#
    Réponses: 5
    Dernier message: 23/10/2008, 13h14
  4. récupérer le nom du fichier cliqué par la souris
    Par PH_DEMS dans le forum VB 6 et antérieur
    Réponses: 12
    Dernier message: 04/06/2008, 14h06
  5. Récupérer le handle de contrôles qui ne sont pas atteignables par la souris
    Par olaf_le_preux dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 14/01/2008, 10h08

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