Déclencher programmatiquement une commande d'un menu d'icône de la SysTray
13 réponses
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
\***************************************/
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.
Yep, et c'est ce handle qui recoit le message spécifié lors de la création de l'icone. Mais la fenetre qui interesse Patrick peut n'etre créée que sur le WM_RBUTTONDOWN de l'icone.
Bref le truc simple et évident à programmer :-| J'ai déjà fait pire mais j'espérais y échapper...
C'est plutot interessant a faire.
Vulnerant omnes, ultima necat (Socrate).
In vinasse very tot (moi)
-- « Le travail est probablement ce qu'il y a sur cette terre de plus bas et de plus ignoble. Il n'est pas possible de regarder un travailleur sans maudire ce qui a fait que cet homme travaille, alors qu'il pourrait nager, dormir dans l'herbe ou simplement lire ou faire l'amour avec sa femme. » Boris VIAN
Mon blog RSS : http://yarglah.free.fr/monblog_rss.php <<
Bonjour,
Cyrille Szymanski a écrit :
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.
Yep, et c'est ce handle qui recoit le message spécifié lors de la création
de l'icone. Mais la fenetre qui interesse Patrick peut n'etre créée que sur
le WM_RBUTTONDOWN de l'icone.
Bref le truc simple et évident à programmer :-| J'ai déjà fait pire
mais j'espérais y échapper...
C'est plutot interessant a faire.
Vulnerant omnes, ultima necat (Socrate).
In vinasse very tot (moi)
--
« Le travail est probablement ce qu'il y a sur cette terre de plus bas et
de plus ignoble. Il n'est pas possible de regarder un travailleur sans
maudire ce qui a fait que cet homme travaille, alors qu'il pourrait nager,
dormir dans l'herbe ou simplement lire ou faire l'amour avec sa femme. »
Boris VIAN
Mon blog RSS : http://yarglah.free.fr/monblog_rss.php <<
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.
Yep, et c'est ce handle qui recoit le message spécifié lors de la création de l'icone. Mais la fenetre qui interesse Patrick peut n'etre créée que sur le WM_RBUTTONDOWN de l'icone.
Bref le truc simple et évident à programmer :-| J'ai déjà fait pire mais j'espérais y échapper...
C'est plutot interessant a faire.
Vulnerant omnes, ultima necat (Socrate).
In vinasse very tot (moi)
-- « Le travail est probablement ce qu'il y a sur cette terre de plus bas et de plus ignoble. Il n'est pas possible de regarder un travailleur sans maudire ce qui a fait que cet homme travaille, alors qu'il pourrait nager, dormir dans l'herbe ou simplement lire ou faire l'amour avec sa femme. » Boris VIAN
Mon blog RSS : http://yarglah.free.fr/monblog_rss.php <<
Cyrille Szymanski
Thierry wrote in news::
Bonjour,
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.
Yep, et c'est ce handle qui recoit le message spécifié lors de la création de l'icone. Mais la fenetre qui interesse Patrick peut n'etre créée que sur le WM_RBUTTONDOWN de l'icone.
Dans ce cas, pour simuler un appui sur le bouton droit et donc créer la fenêtre qui nous intéresse, il suffit d'envoyer WM_RBUTTONDOWN au hWnd, et on n'a pas besoin de faire de la reconnaissance d'image, non ?
-- Cyrille
Thierry <yarglah@com.invalid> wrote in
news:XnF96C5761C57BA6pouletetcetc@212.27.42.74:
Bonjour,
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.
Yep, et c'est ce handle qui recoit le message spécifié lors de la
création de l'icone. Mais la fenetre qui interesse Patrick peut n'etre
créée que sur le WM_RBUTTONDOWN de l'icone.
Dans ce cas, pour simuler un appui sur le bouton droit et donc créer la
fenêtre qui nous intéresse, il suffit d'envoyer WM_RBUTTONDOWN au hWnd, et
on n'a pas besoin de faire de la reconnaissance d'image, non ?
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.
Yep, et c'est ce handle qui recoit le message spécifié lors de la création de l'icone. Mais la fenetre qui interesse Patrick peut n'etre créée que sur le WM_RBUTTONDOWN de l'icone.
Dans ce cas, pour simuler un appui sur le bouton droit et donc créer la fenêtre qui nous intéresse, il suffit d'envoyer WM_RBUTTONDOWN au hWnd, et on n'a pas besoin de faire de la reconnaissance d'image, non ?
-- Cyrille
Thierry
Cyrille Szymanski écrivait news::
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.
Yep, et c'est ce handle qui recoit le message spécifié lors de la création de l'icone. Mais la fenetre qui interesse Patrick peut n'etre créée que sur le WM_RBUTTONDOWN de l'icone.
Dans ce cas, pour simuler un appui sur le bouton droit et donc créer la fenêtre qui nous intéresse, il suffit d'envoyer WM_RBUTTONDOWN au hWnd, et on n'a pas besoin de faire de la reconnaissance d'image, non ?
Ca depend de l'appli qui peut reagir sur un WM_RBUTTONDOWN, WM_RBUTTONUP, ou le double clik (ou les même possibilités avec le bouton gauche), puis apres recuperer le handle de la fenetre créée poru envoyer le WM_COMMAND...
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.
Yep, et c'est ce handle qui recoit le message spécifié lors de la
création de l'icone. Mais la fenetre qui interesse Patrick peut
n'etre créée que sur le WM_RBUTTONDOWN de l'icone.
Dans ce cas, pour simuler un appui sur le bouton droit et donc créer
la fenêtre qui nous intéresse, il suffit d'envoyer WM_RBUTTONDOWN au
hWnd, et on n'a pas besoin de faire de la reconnaissance d'image, non
?
Ca depend de l'appli qui peut reagir sur un WM_RBUTTONDOWN, WM_RBUTTONUP,
ou le double clik (ou les même possibilités avec le bouton gauche), puis
apres recuperer le handle de la fenetre créée poru envoyer le WM_COMMAND...
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.
Yep, et c'est ce handle qui recoit le message spécifié lors de la création de l'icone. Mais la fenetre qui interesse Patrick peut n'etre créée que sur le WM_RBUTTONDOWN de l'icone.
Dans ce cas, pour simuler un appui sur le bouton droit et donc créer la fenêtre qui nous intéresse, il suffit d'envoyer WM_RBUTTONDOWN au hWnd, et on n'a pas besoin de faire de la reconnaissance d'image, non ?
Ca depend de l'appli qui peut reagir sur un WM_RBUTTONDOWN, WM_RBUTTONUP, ou le double clik (ou les même possibilités avec le bouton gauche), puis apres recuperer le handle de la fenetre créée poru envoyer le WM_COMMAND...