Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

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

3 réponses
Avatar
mml
Bonjour,


Un logiciel possède une fenêtre de classe #32770 (Dialogue, je crois) qui
contient des contrôles identifiés par leur Control ID.
Il s'agit d'écrire le code pour récupérer le handle de ces contrôle.

Mais ces contrôles ne sont pas atteignables par la souris tant qu'on n'a pas
cliqué sur le 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 les survole
: elle ne les "atteind" pas.

Pourtant, avec le Finder de l'onglet "Window Search" de Spy++, je peux les
tteindre 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.

3 réponses

Avatar
parci
On Thu, 10 Jan 2008 00:04:02 +0100, "mml" wrote:

Un logiciel possède une fenêtre de classe #32770 (Dialogue, je crois) qui
contient des contrôles identifiés par leur Control ID.
Il s'agit d'écrire le code pour récupérer le handle de ces contrôle.

Mais ces contrôles ne sont pas atteignables par la souris tant qu'on n'a pas
cliqué sur le 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 les survole
: elle ne les "atteind" pas.



Bizarre ...
Ce qui pourrait être possible : tant que tu n'as pas cliquer sur
"modifier", la boite de dialogue affiche en fait une image. Cliquer
sur "modifier" remplace l'image par les contrôles qui sont
effectivement crées à ce moment là. Mais c'est tordu et je ne vois pas
très bien quel serait l'intérêt ...

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

Quelqu'un sait-il comment faire ?



EnumChildWindows est fait pour ça. Tu appelles ton traitement pour
chaque fenêtre fille (pour retrouver l'ID à partir du handle) depuis
la callback.

Un exemple :
http://vbnet.mvps.org/index.html?code/enums/enumwindowsdemo.htm
Avatar
mml
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 et
compare leurs coordonnées à celle de la souris ? N'est-ce pas un peu
gourmand comme traitement ? Vois-tu un autre moyen ?


"parci" a écrit dans le message de
news:
On Thu, 10 Jan 2008 00:04:02 +0100, "mml" wrote:

>Un logiciel possède une fenêtre de classe #32770 (Dialogue, je crois) qui
>contient des contrôles identifiés par leur Control ID.
>Il s'agit d'écrire le code pour récupérer le handle de ces contrôle.
>
>Mais ces contrôles ne sont pas atteignables par la souris tant qu'on n'a


pas
>cliqué sur le 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 les


survole
>: elle ne les "atteind" pas.

Bizarre ...
Ce qui pourrait être possible : tant que tu n'as pas cliquer sur
"modifier", la boite de dialogue affiche en fait une image. Cliquer
sur "modifier" remplace l'image par les contrôles qui sont
effectivement crées à ce moment là. Mais c'est tordu et je ne vois pas
très bien quel serait l'intérêt ...

>Pourtant, avec le Finder de l'onglet "Window Search" de Spy++, je peux


les
>tteindre et Spy++ donne bien leur Handle.
>
>Quelqu'un sait-il comment faire ?

EnumChildWindows est fait pour ça. Tu appelles ton traitement pour
chaque fenêtre fille (pour retrouver l'ID à partir du handle) depuis
la callback.

Un exemple :
http://vbnet.mvps.org/index.html?code/enums/enumwindowsdemo.htm



Avatar
parci
On Fri, 11 Jan 2008 19:24:12 +0100, "mml" wrote:

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 et
compare leurs coordonnées à celle de la souris ? N'est-ce pas un peu
gourmand comme traitement ? Vois-tu un autre moyen ?



Une fois que tu as les handles des controles, tu peux fixer leurs
valeurs (pour des zones texte) ou cliquer (bouton) ou retrouver leurs
propriétés par code. Je ne vois pas trop pourquoi tu aurais besoin
d'agir en fonction de la position de la souris.

De toute façon si tu obtiens les handles des contrôles avec
EnumChildWindows tu devrais aussi l'obtenir sous le curseur avec
WindowFromPoint : montre quel est le code que tu utilises.