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

Déclencher programmatiquement une commande d'un menu d'icône de la SysTray

13 réponses
Avatar
Patrick 'Zener' Brunet
Bonjour.

Dans le cadre d'un projet visant à automatiser des tâches sur un PC sous
Windows (2000 ou XP), lesdites tâches n'ayant pas été conçues pour ça, je
cherche à accomplir l'exploit suivant :

* Le but final est de créer un script de commande AutoIt ou AutoHotKey ou
similaire, pour la lancer vocalement avec Dragon NS ou autre système de
commande.

Donc en première approximation, disons que l'on veut créer un alias pour une
commande figurant dans le menu d'une icône de la SysTray, cet alias pouvant
idéalement être traité comme une ligne de commande.

Il y a plusieurs problèmes à résoudre si on veut simplement simuler un clic
sur le menu :
- il faut trouver l'icône dans la SysTray, où si elle est présente, diverses
péripéties peuvent la rendre insaisissable (ordre des icônes, rangement sur
plusieurs lignes, masquage sous XP, icône mutante, résolution),
- il faut générer l'événement équivalent à un clic droit "au bon endroit"
dans "la sous-fenêtre adéquate" de la SysTray,
- il faut ensuite générer l'événement WM_KEYDOWN correspondant à l'item de
menu prévu, après que le menu ait eu le temps de se déployer,
- et là je parle du cas simple, dans certains cas le menu dépend du
contexte, donc il faut faire de la reconnaissance d'image sur l'icône (sans
rire).

D'où l'intérêt de faire autrement, comme il est possible par exemple de
lancer directement par RunDll32 une applet du Panneau de Contrôle plutôt que
d'aller jouer avec ses icônes.

Mais donc pour une icône SysTray appartenant à un process dont on connaît
uniquement le nom et le contenu du fameux menu, je ne sais pas par où
passer...

Exemple d'application : déclencher un scan global des disques par
l'anti-virus Avast, et pour ça réveiller (démarrer) son interface
graphique... Pas plus de précision.

Evidemment, dans un contexte de programmation MVC, ce genre de problème ne
devrait même pas exister, mais hélas on le retrouve même sur des
"sur-drivers" (HydraVision de ATI pour ma carte multi-écrans par exemple).

Auriez-vous des pistes sur ce sujet ?
Merci d'avance.

Cordialement,

--
/***************************************\
* Patrick BRUNET
* E-mail: lien sur http://zener131.free.fr/ContactMe
\***************************************/

10 réponses

1 2
Avatar
Cyrille Szymanski
"Patrick 'Zener' Brunet" wrote in
news:431483db$0$19074$:

Donc en première approximation, disons que l'on veut créer un alias
pour une commande figurant dans le menu d'une icône de la SysTray, cet
alias pouvant idéalement être traité comme une ligne de commande.



Je ne comprends pas trop ce que tu veux dire par là.

Il y a plusieurs problèmes à résoudre si on veut simplement simuler un
clic sur le menu :
- il faut trouver l'icône dans la SysTray, où si elle est présente,
diverses péripéties peuvent la rendre insaisissable (ordre des icônes,
rangement sur plusieurs lignes, masquage sous XP, icône mutante,
résolution),
- il faut générer l'événement équivalent à un clic droit
"au bon endroit" dans "la sous-fenêtre adéquate" de la SysTray,
- il faut ensuite générer l'événement WM_KEYDOWN correspondant à
l'item de menu prévu, après que le menu ait eu le temps de se
déployer, - et là je parle du cas simple, dans certains cas le menu
dépend du contexte, donc il faut faire de la reconnaissance d'image
sur l'icône (sans rire).



Je ne suis pas certain d'avoir bien compris pourquoi c'était compliqué. En
tout cas je propose cette méthode qui me semble être un grand classique :

1. Identifier le handle de la fenêtre qui t'intéresse dans la zone de
notificaton (par exemple en énumérant tout ce qui existe).
2. Envoyer le bon message (ex. WM_COMMAND avec le bon wID).

Le tout à grand coup de Spy++ pour espioner le bon message à envoyer
(sélectionner la fenêtre dans la liste puis Ctrl+M).

Peu importe la position de l'icône, la langue, les locales et autres, pas
besoin de se soucier de coordonnées ou quoi que ce soit d'autre.

--
Cyrille Szymanski
Avatar
Patrick 'Zener' Brunet
Bonjour.

Je réponds à Cyrille Szymanski
qui dans a écrit :
"Patrick 'Zener' Brunet" wrote
in news:431483db$0$19074$:

Donc en première approximation, disons que l'on veut créer un alias
pour une commande figurant dans le menu d'une icône de la SysTray,
cet alias pouvant idéalement être traité comme une ligne de commande.



Je ne comprends pas trop ce que tu veux dire par là.




Le système de commande qui va chapeauter le tout (dictée vocale par exemple)
sait lancer des programmes (= des exécutables), et à la rigueur activer des
items du menu principal (= Démarrer). Donc il faut lui donner un équivalent
pour cette forme pour l'item voulu du menu de l'icône.


Il y a plusieurs problèmes à résoudre si on veut simplement simuler
un clic sur le menu :
- il faut trouver l'icône dans la SysTray, où si elle est présente,
diverses péripéties peuvent la rendre insaisissable (ordre des
icônes, rangement sur plusieurs lignes, masquage sous XP, icône
mutante, résolution),
- il faut générer l'événement équivalent à un clic droit
"au bon endroit" dans "la sous-fenêtre adéquate" de la SysTray,
- il faut ensuite générer l'événement WM_KEYDOWN correspondant à
l'item de menu prévu, après que le menu ait eu le temps de se
déployer, - et là je parle du cas simple, dans certains cas le menu
dépend du contexte, donc il faut faire de la reconnaissance d'image
sur l'icône (sans rire).



Je ne suis pas certain d'avoir bien compris pourquoi c'était
compliqué. En tout cas je propose cette méthode qui me semble être un
grand classique :

1. Identifier le handle de la fenêtre qui t'intéresse dans la zone de
notificaton (par exemple en énumérant tout ce qui existe).



Bon, je dois pouvoir trouver le petit nom de la "zone de notification" avec
un spy (il faudra que je remette la main temporairement sur une machine XP)
et a priori il ne change pas.
Par contre, énumérer les icônes, je sais faire, mais identifier la bonne
(programmatiquement je veux dire) ... sur quel critère ? Y a-t-il une
relation exploitable avec le nom du process (qui tourne souvent en tâche de
fond bien sûr) ?

2. Envoyer le bon message (ex. WM_COMMAND avec le bon wID).



Trouvé avec l'icône donc, parce qu'il doit être alloué dynamiquement.


Le tout à grand coup de Spy++ pour espioner le bon message à envoyer
(sélectionner la fenêtre dans la liste puis Ctrl+M).




Ca par contre c'est bon pour trouver comment faire, mais en version achevée,
le petit utilitaire but de l'opération devra se débrouiller tout seul, sans
le Spy et sans mes yeux.


Peu importe la position de l'icône, la langue, les locales et autres,
pas besoin de se soucier de coordonnées ou quoi que ce soit d'autre.



Oui, effectivement c'est pourquoi je veux faire un petit utilitaire
paramétrable pour échapper à tout ça. Si vous avez la curiosité de chercher
le topic "systray" sur le forum de AutoHotKey, vous verrez que c'est
vraiment galère.

Bien, vous confirmez ce que j'avais plus ou moins envisagé comme la
meilleure voie, et je vous en remercie.
Mais donc je vois qu'il va falloir intégrer une version simplifiée du Spy
:-/

Je vais devoir mettre le truc au point sur Win2000 (que j'ai sous la main),
et ensuite à l'occasion je ferai une adaptation à XP.

Merci,
Cordialement,

--
/***************************************
* Patrick BRUNET
* E-mail: lien sur http://zener131.free.fr/ContactMe
***************************************/
Avatar
Cyrille Szymanski
"Patrick 'Zener' Brunet" wrote in
news:4315648d$0$31025$:

Bon, je dois pouvoir trouver le petit nom de la "zone de notification"
Y a-t-il une relation exploitable avec le nom du process (qui tourne
souvent en tâche de fond bien sûr) ?



Non, il faut simplement le handle de la fenêtre qui est utilisée pour
recevoir le message qui déclenche l'action voulue. Pour obtenir le handle
de la fenêtre : FindWindow(), EnumWindows(), ToolHelp ou autre.

Ensuite il "suffit" d'envoyer le bon message.

Je viens de faire un petit essai avec Google Notifier, le code suivant
simule l'appui sur l'option "Tell me again" dans le menu de la zone de
notification :

// "GoogleGmailNotifySysTray" trouvé grâce à Spy++
HWND hWnd = FindWindow("GoogleGmailNotifySysTray", NULL);
if( hWnd==NULL ) {
MessageBox(NULL, "Impossible de trouver la fenêtre", "Erreur", 0);
return 0;
}
// "WM_COMMAND wParam04 lParam=0" trouvés grâce à Spy++
PostMessage(hWnd, WM_COMMAND, 1004, 0);


Mais donc je vois qu'il va falloir intégrer une version simplifiée du
Spy
:-/



L'outil doit-il pouvoir lancer un élément arbitraire, ou tout simplement un
parmi ceux qui auront été prévus initialement ? Parce que là
effectivement, ça varie beaucoup d'une application à l'autre.


--
Cyrille Szymanski
Avatar
Patrick 'Zener' Brunet
Bonjour.

Je réponds à Cyrille Szymanski
qui dans a écrit :
"Patrick 'Zener' Brunet" wrote
in news:4315648d$0$31025$:

Bon, je dois pouvoir trouver le petit nom de la "zone de
notification" Y a-t-il une relation exploitable avec le nom du
process (qui tourne souvent en tâche de fond bien sûr) ?



Non, il faut simplement le handle de la fenêtre qui est utilisée pour
recevoir le message qui déclenche l'action voulue. Pour obtenir le
handle de la fenêtre : FindWindow(), EnumWindows(), ToolHelp ou autre.




Dans l'exemple que vous donnez ci-dessous, il y a en fait une relation
humainement interprétable et surtout reproductible dans le nom de la
fenêtre. cf infra.

Ensuite il "suffit" d'envoyer le bon message.

Je viens de faire un petit essai avec Google Notifier, le code suivant
simule l'appui sur l'option "Tell me again" dans le menu de la zone de
notification :

// "GoogleGmailNotifySysTray" trouvé grâce à Spy++
HWND hWnd = FindWindow("GoogleGmailNotifySysTray", NULL);
if( hWnd==NULL ) {
MessageBox(NULL, "Impossible de trouver la fenêtre", "Erreur", 0);
return 0;
}
// "WM_COMMAND wParam04 lParam=0" trouvés grâce à Spy++
PostMessage(hWnd, WM_COMMAND, 1004, 0);


Mais donc je vois qu'il va falloir intégrer une version simplifiée du
Spy :-/



L'outil doit-il pouvoir lancer un élément arbitraire, ou tout
simplement un parmi ceux qui auront été prévus initialement ? Parce
que là effectivement, ça varie beaucoup d'une application à l'autre.



Donc chaque icône est en fait une fenêtre ? Oui, ça m'arrange un peu, en
étudiant les primitives des outils de scripting il semblait bien que les
icônes étaient "dessinées" sur une seule fenêtre "Zone de notification",
imposant donc de trouver les coordonnées par reconnaissance graphique
(sisi!). Leur Spy est donc moins bon que Spy++ !

Dans votre exemple, donc le nom "GoogleGmailNotifySysTray" étant repéré à
l'avance, l'utilitaire pourra se passer de Spy++ et faire seulement le
FindWindow() pour trouver le handle, qui lui est dynamique.
J'imagine que le 1004 est l'ID de contrôle de l'item de menu "Tell me
again". Je pense que ça devrait répondre aussi avec un WM_KEYDOWN + 'T' (ou
autre accélerateur souligné) mais peut-être pas avant d'avoir déployé le
menu.

Finalement le WM_COMMAND c'est pas plus mal parce que le but étant de
déclencher les commandes à la voix ou par des options de menu simplifiées
(dans le menu Démarrer), il peut y avoir interférence si la personne bouge
la souris par-dessus le menu lorsqu'il est déployé par le script. C'est la
solution "standard" avec AutoHotKey, AutoIt et les autres si on veut une
programmation simple (ie: clônable par un non-informaticien), mais donc mon
but est de faire un utilitaire "panneau de commandes prédéfinies" plus
fiable.

Merci beaucoup pour ces tuyaux.

Cordialement,

--
/***************************************
* Patrick BRUNET
* E-mail: lien sur http://zener131.free.fr/ContactMe
***************************************/
Avatar
Cyrille Szymanski
"Patrick 'Zener' Brunet" wrote in
news:4315d6b3$0$6461$:

en étudiant les primitives des outils de scripting il semblait bien
que les icônes étaient "dessinées" sur une seule fenêtre "Zone de
notification", imposant donc de trouver les coordonnées par
reconnaissance graphique (sisi!).



C'est bien cela. Mais pas forcément besoin de reconnaissance graphique :
les événements sur ces icônes génèrent des messages qui sont en fin de
compte envoyés à une fenêtre.

Et en réalité, dans l'exemple que je donne, on se fiche de savoir s'il y
a ou non une icône, un menu ou autre, la seule chose à trouver c'est que
WM_COMMAND+1004 déclenche l'action voulue. Et pour déterminer le HWND il
se trouve que la fenêtre a un joli nom de classe et que ça colle bien
avec FindWindow(), mais on pouvait s'en sortir autrement (par ex
gnotify.exe ne crée qu'une seule fenêtre...)

Pour info :

Une icône se place dans la zone de notification en appelant
Shell_NotifyIcon() *lire la doc de cette fonction elle regorge d'infos*
On spécifie un message callback et une fenêtre de destination.

Trouver des bouts de code qui expliquent comment créer ces icônes et
comment gérer les événements aidera sûrement à comprendre comment
court-circuiter leur fonctionnement. C'est probablement pas les
événements déclenchés par l'icône qui sont intéressants mais ceux
déclenchés par les clics sur les sous menus...


Dans votre exemple, donc le nom "GoogleGmailNotifySysTray" étant
repéré à l'avance, l'utilitaire pourra se passer de Spy++ et faire
seulement le FindWindow() pour trouver le handle, qui lui est
dynamique. J'imagine que le 1004 est l'ID de contrôle de l'item de
menu "Tell me again". Je pense que ça devrait répondre aussi avec un
WM_KEYDOWN + 'T' (ou autre accélerateur souligné) mais peut-être pas
avant d'avoir déployé le menu.



Oui c'est exactement ça :-)

Merci beaucoup pour ces tuyaux.



Pas si vite... j'ai essayé avec MSN Messenger et j'ai été incapable de
simuler les clics sur le changement de statut. J'ai dû passer à côté de
qqch...

Quelqu'un a-t-il une idée ?

--
Cyrille Szymanski
Avatar
Patrick 'Zener' Brunet
Bonjour.

Je réponds à Cyrille Szymanski
qui dans a écrit :
"Patrick 'Zener' Brunet" wrote
in news:4315d6b3$0$6461$:

en étudiant les primitives des outils de scripting il semblait bien
que les icônes étaient "dessinées" sur une seule fenêtre "Zone de
notification", imposant donc de trouver les coordonnées par
reconnaissance graphique (sisi!).



C'est bien cela. Mais pas forcément besoin de reconnaissance
graphique : les événements sur ces icônes génèrent des messages qui
sont en fin de compte envoyés à une fenêtre.

Et en réalité, dans l'exemple que je donne, on se fiche de savoir
s'il y a ou non une icône, un menu ou autre, la seule chose à trouver
c'est que WM_COMMAND+1004 déclenche l'action voulue. Et pour
déterminer le HWND il se trouve que la fenêtre a un joli nom de
classe et que ça colle bien avec FindWindow(), mais on pouvait s'en
sortir autrement (par ex gnotify.exe ne crée qu'une seule fenêtre...)

Pour info :

Une icône se place dans la zone de notification en appelant
Shell_NotifyIcon() *lire la doc de cette fonction elle regorge
d'infos* On spécifie un message callback et une fenêtre de
destination.

Trouver des bouts de code qui expliquent comment créer ces icônes et
comment gérer les événements aidera sûrement à comprendre comment
court-circuiter leur fonctionnement. C'est probablement pas les
événements déclenchés par l'icône qui sont intéressants mais ceux
déclenchés par les clics sur les sous menus...


Dans votre exemple, donc le nom "GoogleGmailNotifySysTray" étant
repéré à l'avance, l'utilitaire pourra se passer de Spy++ et faire
seulement le FindWindow() pour trouver le handle, qui lui est
dynamique. J'imagine que le 1004 est l'ID de contrôle de l'item de
menu "Tell me again". Je pense que ça devrait répondre aussi avec un
WM_KEYDOWN + 'T' (ou autre accélerateur souligné) mais peut-être pas
avant d'avoir déployé le menu.



Oui c'est exactement ça :-)

Merci beaucoup pour ces tuyaux.



Pas si vite... j'ai essayé avec MSN Messenger et j'ai été incapable de
simuler les clics sur le changement de statut. J'ai dû passer à côté
de qqch...

Quelqu'un a-t-il une idée ?



Oui, en fait je viens de faire l'expérience avec le Spy++ sous Win2000 :

- La seule fenêtre qu'il voit est la "zone de notification" globale, nommée
ToolbarWindow32.

- Si je scanne les messages correspondant à un R-Click sur l'icône de Avast
anti-virus par exemple, je récupère des tas de messages souris assortis de
leur coordonnées, mais rien qui permette d'identifier cette icône de manière
reproductible :'( Un autre jour l'ordre des icônes peut être très différent,
surtout avec XP qui fait un masquage LRU.

- Je n'ai pas trouvé de WM_COMMAND dans le listing de Spy++ après mon
R-Click :'( Seulement un WM_CONTEXTMENU et des données partout qui
ressemblent plutôt à des handles qu'à des ID.

- J'ai moi-même développé des applications qui plaçaient une icône dans la
SysTray, mais là il s'agit d'une application dont je ne connais pas les
secrets...

Bref rien de reproductible, apparemment tous ces identifiants sont
construits dynamiquement lorsqu'une application enregistre une icône (ce qui
semble logique puisqu'il n'y a pas de concertation entre éditeurs et que les
commandes doivent être uniques) :'((((((((

Ce qui peut expliquer la reconnaissance d'image comme solution finale :
http://www.autohotkey.com/forum/viewtopic.php?t819&highlight=systray+icon

Vive la conception modulaire selon le modèle MVC, pas vrai ?

Merci tout de même,
Cordialement,

--
/***************************************
* Patrick BRUNET
* E-mail: lien sur http://zener131.free.fr/ContactMe
***************************************/
Avatar
Cyrille Szymanski
"Patrick 'Zener' Brunet" wrote in
news:4316b7f0$0$1709$:

- Si je scanne les messages correspondant à un R-Click sur l'icône de
Avast anti-virus par exemple, je récupère des tas de messages souris
assortis de leur coordonnées, mais rien qui permette d'identifier
cette icône de manière reproductible :'( Un autre jour l'ordre des
icônes peut être très différent, surtout avec XP qui fait un masquage
LRU.



Oui c'est normal, la zone de notification ne sert qu'à détecter les
mouvements de souris et les clics (cf doc). Le menu qui s'affiche ensuite
appartient à une fenêtre de l'appli concernée, c'est donc elle qui reçoit
le message WM_COMMAND (par exemple) et donc elle qu'il faut espioner.


- Je n'ai pas trouvé de WM_COMMAND dans le listing de Spy++ après mon
R-Click :'( Seulement un WM_CONTEXTMENU et des données partout qui
ressemblent plutôt à des handles qu'à des ID.



Dans le listing des messages envoyés à là ToolbarWindow32 c'est normal.
Il faut lister les messages envoyés à l'application à espioner (gnotify
dans mon exemple, msnmessenger et eutres) et non ToolbarWindow32.

J'ai peur de pas avoir été très clair sur l'utilisation de Spy++ :'-(

Le plus simple est de passer en mode vue des processus, développer pour
voir les threads puis les fenêtres et espioner les messages envoyés à
chacune d'elles quand on clique sur ce qui nous intéresse.

Ce qui peut expliquer la reconnaissance d'image comme solution finale
http://www.autohotkey.com/forum/viewtopic.php?t819&highlight=systray+
icon



C'est marrant comme discussion en tout cas.

--
Cyrille Szymanski
Avatar
Patrick 'Zener' Brunet
Bonjour.

Je réponds à Cyrille Szymanski
qui dans a écrit :
"Patrick 'Zener' Brunet" wrote
in news:4316b7f0$0$1709$:

- Si je scanne les messages correspondant à un R-Click sur l'icône de
Avast anti-virus par exemple, je récupère des tas de messages souris
assortis de leur coordonnées, mais rien qui permette d'identifier
cette icône de manière reproductible :'( Un autre jour l'ordre des
icônes peut être très différent, surtout avec XP qui fait un masquage
LRU.



Oui c'est normal, la zone de notification ne sert qu'à détecter les
mouvements de souris et les clics (cf doc). Le menu qui s'affiche
ensuite appartient à une fenêtre de l'appli concernée, c'est donc
elle qui reçoit le message WM_COMMAND (par exemple) et donc elle
qu'il faut espioner.


- Je n'ai pas trouvé de WM_COMMAND dans le listing de Spy++ après mon
R-Click :'( Seulement un WM_CONTEXTMENU et des données partout qui
ressemblent plutôt à des handles qu'à des ID.



Dans le listing des messages envoyés à là ToolbarWindow32 c'est
normal. Il faut lister les messages envoyés à l'application à
espioner (gnotify dans mon exemple, msnmessenger et eutres) et non
ToolbarWindow32.

J'ai peur de pas avoir été très clair sur l'utilisation de Spy++ :'-(

Le plus simple est de passer en mode vue des processus, développer
pour voir les threads puis les fenêtres et espioner les messages
envoyés à chacune d'elles quand on clique sur ce qui nous intéresse.




Je vous rassure Cyrille, j'utilisais déjà le Spy depuis longtemps, mais là
donc le but est d'écrire un utilitaire que je puisse paramétrer
définitivement pour qu'il sache tout seul, de manière fiable et
reproductible, générer l'action que l'on obtient normalement par la manip
menu...

L'application à espionner en fait n'a pas de fenêtre tant qu'on n'a pas
déclenché l'option de menu, et donc c'est un préalable (après je sais
faire). Et c'est bien ce préalable qui pose problème puisqu'il semble bien
relever de l'analyse visuelle et humaine.

Le but final est d'automatiser des opérations pour être commandées à la voix
par une personne malvoyante ! Donc il n'est pas question de lui installer le
Spy sur sa bécane et de lui demander de chercher le paramètre du WM_COMMAND
: si elle pouvait faire ça, elle pourrait plus facilement encore cliquer
directement sur l'icône.

En fait comme je le craignais, cette voie n'est pas **automatiquement**
utilisable, et il faudrait que j'arrive à procéder autrement :
J'envisageais de placer une forme de hook sur la Toolbar pour détecter les
événements de retraçage (ou autres) d'icônes, le but étant de trouver à quel
process ils sont associés et donc en identifiant le nom du process,
localiser l'icône voulue (et ensuite la suivre si elle se balade).
Ensuite il faudrait pouvoir injecter de la même manière un WM_RBUTTONDOWN
dans la Toolbar à l'endroit approprié pour produire l'équivalent d'un
R-Click sur l'icône, et ensuite donc etc.

Bref le truc simple et évident à programmer :-| J'ai déjà fait pire mais
j'espérais y échapper...

Vulnerant omnes, ultima necat (Socrate).

Cordialement,

--
/***************************************
* Patrick BRUNET
* E-mail: lien sur http://zener131.free.fr/ContactMe
***************************************/
Avatar
Cyrille Szymanski
"Patrick 'Zener' Brunet" wrote in
news:4316d1e3$0$12488$:

Je vous rassure Cyrille, j'utilisais déjà le Spy depuis longtemps,
mais là donc le but est d'écrire un utilitaire que je puisse
paramétrer définitivement pour qu'il sache tout seul, de manière
fiable et reproductible, générer l'action que l'on obtient normalement
par la manip menu...



Ah ok, au temps pour moi. Alors ça pourra quand même servir à des gens
moins avertis.


L'application à espionner en fait n'a pas de fenêtre tant qu'on n'a
pas déclenché l'option de menu, et donc c'est un préalable (après je
sais faire). Et c'est bien ce préalable qui pose problème puisqu'il
semble bien relever de l'analyse visuelle et humaine.



Ce qui me gêne quand même c'est que pour créer une icône, il faut spécifier
un hWnd pour le message de callback. Il doit bien y avoir une boucle de
message quelquepart dans cette application.

Il faut demander aux gens plus expérimentés de ce ng.


Le but final est d'automatiser des opérations pour être commandées à
la voix par une personne malvoyante ! Donc il n'est pas question de
lui installer le Spy sur sa bécane et de lui demander de chercher le
paramètre du WM_COMMAND
: si elle pouvait faire ça, elle pourrait plus facilement encore
: cliquer
directement sur l'icône.

En fait comme je le craignais, cette voie n'est pas
**automatiquement** utilisable, et il faudrait que j'arrive à procéder
autrement : J'envisageais de placer une forme de hook sur la Toolbar
pour détecter les événements de retraçage (ou autres) d'icônes, le but
étant de trouver à quel process ils sont associés et donc en
identifiant le nom du process, localiser l'icône voulue (et ensuite la
suivre si elle se balade). Ensuite il faudrait pouvoir injecter de la
même manière un WM_RBUTTONDOWN dans la Toolbar à l'endroit approprié
pour produire l'équivalent d'un R-Click sur l'icône, et ensuite donc
etc.



Bref le truc simple et évident à programmer :-| J'ai déjà fait pire
mais j'espérais y échapper...

Vulnerant omnes, ultima necat (Socrate).



héhé... desine fata deum flecti sperare precando :-)


--
Cyrille Szymanski
Avatar
Patrick 'Zener' Brunet
Bonjour.

Je réponds à Cyrille Szymanski
qui dans a écrit :
"Patrick 'Zener' Brunet" wrote
in news:4316d1e3$0$12488$:
[...]
Bref le truc simple et évident à programmer :-| J'ai déjà fait pire
mais j'espérais y échapper...

Vulnerant omnes, ultima necat (Socrate).



héhé... desine fata deum flecti sperare precando :-)



Il y a bien longtemps que je ne compte plus sur les miracles ; par contre je
répondrai par l'interprétation de Jules Verne: plutôt que
* audaces fortuna juvat,
je recommande le principe:
* audentes fortuna juvat

Et donc cogito, cogito ... Mais bon, on va se faire repérer là :-D

Cordialement,

--
/***************************************
* Patrick BRUNET
* E-mail: lien sur http://zener131.free.fr/ContactMe
***************************************/
1 2