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).
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).
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).
"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.
"Patrick 'Zener' Brunet" <use.link.in.signature@ddress.invalid> wrote
in news:431483db$0$19074$626a14ce@news.free.fr:
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.
"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.
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) ?
Mais donc je vois qu'il va falloir intégrer une version simplifiée du
Spy
:-/
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) ?
Mais donc je vois qu'il va falloir intégrer une version simplifiée du
Spy
:-/
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) ?
Mais donc je vois qu'il va falloir intégrer une version simplifiée du
Spy
:-/
"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.
"Patrick 'Zener' Brunet" <use.link.in.signature@ddress.invalid> wrote
in news:4315648d$0$31025$626a14ce@news.free.fr:
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.
"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.
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!).
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.
Merci beaucoup pour ces tuyaux.
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!).
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.
Merci beaucoup pour ces tuyaux.
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!).
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.
Merci beaucoup pour ces tuyaux.
"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 ?
"Patrick 'Zener' Brunet" <use.link.in.signature@ddress.invalid> wrote
in news:4315d6b3$0$6461$626a14ce@news.free.fr:
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 ?
"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 ?
- 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.
Ce qui peut expliquer la reconnaissance d'image comme solution finale
http://www.autohotkey.com/forum/viewtopic.php?t819&highlight=systray+
icon
- 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.
Ce qui peut expliquer la reconnaissance d'image comme solution finale
http://www.autohotkey.com/forum/viewtopic.php?t819&highlight=systray+
icon
- 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.
Ce qui peut expliquer la reconnaissance d'image comme solution finale
http://www.autohotkey.com/forum/viewtopic.php?t819&highlight=systray+
icon
"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.
"Patrick 'Zener' Brunet" <use.link.in.signature@ddress.invalid> wrote
in news:4316b7f0$0$1709$626a14ce@news.free.fr:
- 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.
"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).
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).
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).
"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 :-)
"Patrick 'Zener' Brunet" <use.link.in.signature@ddress.invalid> wrote
in news:4316d1e3$0$12488$626a14ce@news.free.fr:
[...]
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 :-)
"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 :-)