Plusieurs tray icons

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
cerede2000
Niveau 1
Niveau 1
Messages : 2
Enregistré le : mar. 19 avr. 2016 12:07
Status : Hors ligne

Plusieurs tray icons

#1

Message par cerede2000 »

Bonjour à tous,

Je cherche (si cela est possible avec AutoIt) à ajouter plusieurs tray icons pour une même instance de script AutoIt.

J'ai pas mal cherché sur ce sujet et je n'ai rien trouvé.

Aucun problème pour une seule icone évidemment, mais j'en voudrais 3 !
Pour gérer les états de numlock, capslock et defillock :)

Merci à vous.
Avatar du membre
TomAijerrie
Niveau 5
Niveau 5
Messages : 192
Enregistré le : lun. 02 juin 2014 09:55
Localisation : Lyon
Status : Hors ligne

Re: Plusieurs tray icons

#2

Message par TomAijerrie »

Salut,

Apres de très rapides recherches, je n'ai pas trouvé de solution pour gérer plusieurs TrayIcon.

Je suis parti sur une solution qui consiste à exécuter simultanément plusieurs fois ton script, avec différents arguments (paramètres).
Pour résumer, tu exécute ton script (à priori sans paramètres),
- après vérification qu'il est bien le programme maître (aucun paramètre, càd $cmdline[0] = 0)
- il s’exécute avec le paramètre 2
- il s’exécute avec le paramètre 3
- on active l’exécution de la fonction ToutFermer() quand le programme va s’éteindre
- il fait ce qu'il a à faire (surveillance de NumLock par exemple)
- Si il doit fermer (exit dans le menu, le gestionnaire de taches l’arrête, ou autre), alors il ferme les deux autres icônes

Si le programme à un argument ($cmdline <> 0) alors
- si l'argument est 2 ($cmdline = 2)
- surveillance de CapsLock sans s'inquiéter de devoir s'éteindre (le maître s'en occupe)

Si le programme à un argument ($cmdline <> 0) alors
- si l'argument est 3 ($cmdline = 3)
- surveillance de DefilLock sans s'inquiéter de devoir s'éteindre (le maître s'en occupe)

Code : Tout sélectionner

#NoTrayIcon;pour ne pas avoir de problèmes

#include <TrayConstants.au3> ; Required for the $TRAY_ICONSTATE_SHOW constant.

Opt("TrayMenuMode", 3) ; The default tray menu items will not be shown and items are not checked when selected. These are options 1 and 2 for TrayMenuMode.

Global $TrayPID2 = -1
Global $TrayPID3 = -1

If $cmdline[0] = 0 Then
	;Programme Maître
    Local $idAbout = TrayCreateItem("About");menu facultatif
    TrayCreateItem("") ; Create a separator line.

    Local $idExit = TrayCreateItem("Exit")

    TraySetState($TRAY_ICONSTATE_SHOW) ; Show the tray menu.

	If @Compiled Then
		$TrayPID2 = ShellExecute(@ScriptFullPath,2);à verifier
		$TrayPID3 = ShellExecute(@ScriptFullPath,3)
	Else
		$TrayPID2 = ShellExecute(@AutoItExe,'"' & @ScriptFullPath & '" 2');ça fonctionne, même si il y a des espaces dans le chemin d'acces
		$TrayPID3 = ShellExecute(@AutoItExe,'"' & @ScriptFullPath & '" 3')
	EndIf

	OnAutoItExitRegister("ToutFermer");si le script s'éteint, on éteint les deux autres

    While 1
		;il faut ajouter ici ce qu'il faut les tests pour verifier l'état du NumLock et les actions associées
        Switch TrayGetMsg()
            Case $idAbout ; Display a message box about the AutoIt version and installation path of the AutoIt executable.
                MsgBox(0, "", "Process Principal") ; Find the folder of a full path.
            Case $idExit ; Exit the loop.
				;tu peux ajouter ici ToutFermer() , mais ce n'est pas obligatoire car la fonction sera forcément exécutée quand le programme va s'arreter
                ExitLoop;ou Exit
        EndSwitch
    WEnd
Else
	If $cmdline[1] = 2 Then
		;deuxième programme
		Local $idAbout = TrayCreateItem("About");facultatif
		TrayCreateItem("") ; Create a separator line.

		TraySetState($TRAY_ICONSTATE_SHOW) ; Show the tray menu.
		TraySetIcon("C:\WINDOWS\system32\shell32.dll",12);on change l'icone pour le différencier du premier et du troisième

		While 1
			Switch TrayGetMsg()
				;ici la surveillance de CapsLock
				Case $idAbout
					MsgBox(0, "", "Tray 2")
			EndSwitch
		WEnd
	ElseIf $cmdline[1] = 3 Then
		;troisième programme
		;identique au deuxième, sauf qu'il surveille autre chose
		Local $idAbout = TrayCreateItem("About")
		TrayCreateItem("")

		TraySetState($TRAY_ICONSTATE_SHOW)
		TraySetIcon("C:\WINDOWS\system32\shell32.dll",10)

		While 1
			Switch TrayGetMsg()
				Case $idAbout
					MsgBox(0, "", "Tray 2")
			EndSwitch
		WEnd
	EndIf
EndIf

Func ToutFermer()
	ProcessClose($TrayPID2);kill du deuxième icone
	ProcessClose($TrayPID3);kill du troisième
EndFunc
Ce code permet de tout mettre dans un seul programme, mais tu peux en faire trois différents et oublier les histoires de paramètres.
Dans ces deux cas ton programme apparaîtra trois fois dans le gestionnaire des taches.

J’espère que c'es ce que tu cherches.
cerede2000
Niveau 1
Niveau 1
Messages : 2
Enregistré le : mar. 19 avr. 2016 12:07
Status : Hors ligne

Re: Plusieurs tray icons

#3

Message par cerede2000 »

Super !!
Merci à toi :)

C'est en effet une bonne idée à laquelle je n'aurais pas pensé !
Un poil lourd quand même d'avoir du coup 3 process pour un traitement mais bon :)
Avatar du membre
TomAijerrie
Niveau 5
Niveau 5
Messages : 192
Enregistré le : lun. 02 juin 2014 09:55
Localisation : Lyon
Status : Hors ligne

Re: Plusieurs tray icons

#4

Message par TomAijerrie »

Si tes scripts ne font que vérifier l'état des touches NumLock, CapsLock et DefilLock, et changer l'icone de tes trays icones, même sans ajouter de sleep, ça ne devrais pas trop ce voir. Par exemple, quand tu as deux onglets avec google chrome, il y a (à peut près) sept Google chrome dans le gestionnaire des tâches, et ça ne se voit pas.
Répondre