[..] Menus d'icone "Tray" : Action sur passage de souris

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Avatar du membre
Pollux
Niveau 2
Niveau 2
Messages : 19
Enregistré le : lun. 10 nov. 2008 05:09
Status : Hors ligne

[..] Menus d'icone "Tray" : Action sur passage de souris

#1

Message par Pollux »

Salut tout le monde,

Je me suis lancé dans les fonctions du system tray (menus d'icone à droite de la barre des tâches).
J'ai créé des menus qui apparaissent quand on fait un clic droit sur l'icone dans le system tray.
Ce que j'aimerai faire, c'est que simplement en allant avec la souris sur les différents menus, différentes images apparaissent sur une fenetre, selon le menu sur lequel pointe la souris). Je ne veux pas que l'utilisateur ait à cliquer sur un menu avec avec sa souris. Les actions doivent s'effectuer simplement par la présence de la souris sur tel ou tel menu.
Je n'ai pas vu de fonction "tray" capable de réaliser cet effet, donc je ne vois pas trop comment faire.

Merci d'avance pour toute l'aide que vous pourrez m'apporter ;)



Pollux
Image
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11798
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Menus d'icone "Tray" : Action sur passage de souris

#2

Message par Tlem »

Je regardé vite fait et je n'ai rien vu permettant ce genre de chose.
Sans doute avec quelques recherches sur le forum Anglais. ;)
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
Pollux
Niveau 2
Niveau 2
Messages : 19
Enregistré le : lun. 10 nov. 2008 05:09
Status : Hors ligne

Re: [..] Menus d'icone "Tray" : Action sur passage de souris

#3

Message par Pollux »

Rebonsoir,

Ayant suivi votre conseil, j'ai posté également sur le forum anglais, j'espère y obtenir de l'aide ;)
J'ai également fouillé un bon paquet de sujets sur leur forum, et je suis tombé sur un code qui permet d'afficher une fenêtre quand la souris approche l'icône du script dans la barre des tâches, et de la masquer quand la souris s'en éloigne. Je "pense" qu'il y a moyen de l'adapter pour détecter tel ou tel menu du Tray, mais entre les ControlGetHandle et les GUICtrlToolbar_GetButtonRect je nage un peu. Je continue à chercher cependant.
Merci d'avance,

Pollux


PS: Commande pour créer un menu dans l'icône de tray: TrayCreateItem

Code : Tout sélectionner

#include <GUIConstantsEx.au3>
#include <Constants.au3>
#Include <GuiToolBar.au3>

Global $aIcon[4]
Find_Icon()

$hWin = GUICreate("Test", 100, 100)
GUISetState(@SW_HIDE, $hWin)

$fShowing = False

While 1
    
    If GUIGetMsg() = -3 Then Exit
    
    $aMouse = MouseGetPos()
    
    If $aMouse[0] >= $aIcon[0] And $aMouse[0] <= $aIcon[2] And $aMouse[1] >= $aIcon[1] And $aMouse <= $aIcon[3] Then
    ; Over icon
        If $fShowing = False Then
            $fShowing = True
            GUISetState(@SW_SHOW, $hWin)
            ConsoleWrite("Showing" & @CRLF)
        EndIf
        
    Else
    ; Off icon
        If $fShowing Then
            ConsoleWrite("Hidden" & @CRLF)
            GUISetState(@SW_HIDE, $hWin)
            $fShowing = False
        EndIf
    EndIf
    
WEnd


Func Find_Icon()

; Find systray handle
$SysTray_Handle = ControlGetHandle('[Class:Shell_TrayWnd]', '', '[Class:ToolbarWindow32;Instance:1]')
If @error Then
    MsgBox(16, "Error", "System tray not found")
    Exit
EndIf

; Get systray item count
$Systray_ButCount = _GUICtrlToolbar_ButtonCount($SysTray_Handle)
If $Systray_ButCount = 0 Then
    MsgBox(16, "Error", "No items found in system tray")
    Exit
EndIf

; Look for tooltip
$Tool_Tip = ""
For $Systray_ButtonNumber = 0 To $Systray_ButCount - 1
; Need to change "AutoIt" to name of your exe when compiled
    $Test = StringSplit(_GUICtrlToolbar_GetButtonText($SysTray_Handle, $Systray_ButtonNumber), "AutoIt" ,1)
    If $Test[0] <> 1 Then ExitLoop
Next

If $Systray_ButtonNumber = $Systray_ButCount Then
; Icon not found
    MsgBox(16, "Error", "AutoIt icon not found in system tray")
    Exit
Else
; Get absolute coords of icon
; get icon size
    $aIcon = _GUICtrlToolbar_GetButtonRect($SysTray_Handle, $Systray_ButtonNumber)
; get x coord of systray
    $aSysTray = ControlGetPos('[Class:Shell_TrayWnd]', '', '[Class:ToolbarWindow32;Instance:1]')
    $aIcon[0] = $aSysTray[0]
    $aIcon[2] = $aSysTray[0] + $aIcon[2]
; get y coord of taskbar
    $aTaskBar = WinGetPos('[Class:Shell_TrayWnd]', '')
    $aIcon[1] = $aTaskBar[1]
    $aIcon[3] = $aTaskBar[1] + $aIcon[3]
EndIf

EndFunc
Crédits à Melba23
Image
papami
Niveau 4
Niveau 4
Messages : 96
Enregistré le : lun. 19 nov. 2007 17:25
Status : Hors ligne

Re: [..] Menus d'icone "Tray" : Action sur passage de souris

#4

Message par papami »

Bonsoir,

Faisable... il faut survoler la chose :D

-soit vous savez déterminer la position et la dimension du menu qui s'ouvre par clic sur l'icône (moi je ne sais pas et s'il y a une recette je suis preneur...)

-soit vous créez un "faux-menu" : petit GUI sans titre ni bouton, que vous affichez sur un clic d'icône (TrayGetMsg et $TRAY_EVENT_PRIMARYDOWN, par exemple)
à ce moment vous en maîtrisez la position les dimensions et les labels.

il suffit ensuite d'utiliser MouseGetPos() et de comparer avec les cordonnées du GUI : si on sort des clous on efface, si on est dans les limites on peut calculer facilement la hauteur et donc quel label on survole, en modifier la couleur de fond au passage et déballer ce que l'on veut, sans avoir à cliquer.

Dans le genre on peut aussi fabriquer une fausse barre de tâches. Dans ces conditions on connait l'emplacement des "icones" que l'on y place, et là aussi on peut travailler par survol, modifier le curseur, etc.

cela représente peu de lignes de programmation et je n'ai remarqué aucun problème de ressource (UC) mais je n'ai pas non plus essayé avec 20 scripts à la fois...

(Pour le code trouvé chez les anglais ce serait bien de donner le lien)

à vous ...
Avatar du membre
Pollux
Niveau 2
Niveau 2
Messages : 19
Enregistré le : lun. 10 nov. 2008 05:09
Status : Hors ligne

Re: [..] Menus d'icone "Tray" : Action sur passage de souris

#5

Message par Pollux »

Bonsoir ²

J'ai effectivement déjà envisagé cette solution (je maitrise assez bien tout ce qui touche aux fenêtres), cependant j'aimerai vraiment ne le faire qu'en dernier recours, car le rendu serait beaucoup moins esthétique.
Qui plus est, j'aimerai explorer des méthodes que je ne maitrise pas encore, pour enrichir mes possibilités futures sur Autoit.
Pour le sujet du forum anglais, le lien est ici:
http://www.autoitscript.com/forum/index ... opic=89051

Je suis persuadé qu'il ne manque pas grand chose pour concrétiser mon idée, les menus du tray étant des contrôles, il doit bien y avoir un moyen de détecter leur position.


Pollux
Image
Répondre