Page 1 sur 1

[R] Actualiser IconTray

Posté : mar. 01 juin 2010 18:51
par Rapace15
Bonsoir à tous,

Je cherche à actualiser un IconTray que j'ai générer avec l'UDF ModerMenuLib.

Je n'arrive à rien... y-a-til une commande pour le faire ?

D'avance merci

Re: [..] Actualiser IconTray

Posté : mar. 01 juin 2010 21:29
par Tlem
A 17h14, vous dites : http://www.autoitscript.fr/forum/viewto ... 462#p32462

Et ici, à 17H51 vous avez un problème !!!

17H51 - 17H14 = 37mn :shock:

Vous ne croyez pas que 37mn c'est un peut court comme travail personnel ?

Re: [..] Actualiser IconTray

Posté : mer. 02 juin 2010 09:37
par Rapace15
Tlem a écrit :A 17h14, vous dites : http://www.autoitscript.fr/forum/viewto ... 462#p32462

Et ici, à 17H51 vous avez un problème !!!

17H51 - 17H14 = 37mn :shock:

Vous ne croyez pas que 37mn c'est un peut court comme travail personnel ?
Parce que je pensais qu'il ne s'agissait pas du même problème.... Le post que vous mentionnez cherchait à mettre des icônes sur un IconTray. Et effectivement, la réponse qui m'a été donnée m'a grandement aidé (au passage merci à vous et à SagePourpre). Maintenant, s'il faut attendre une journée pour poster sur votre forum, je le ferai...
Effectivement mon dernier post sur le sujet précédent est à 17H14, mais le post d'avant où j'ai répondu à l'élément de réponse donné par SagePourpre est à 13H39... 17h51 - 13H39 = 4H12 :shock: . Ce délai vous parait-il acceptable ?
De plus, est-il possible de travailler sur plusieurs sujets simultanément ? J'en suis capable et il me semble que vous aussi puisque vous répondez souvent à plusieurs sujets à quelques minutes d'intervalles.

Je cherche juste à justifier cet écart qui effectivement est très court, mais l'agressivité n'est souvent pas la meilleures des réponses (me semble-t-il).

Re: [..] Actualiser IconTray

Posté : mer. 02 juin 2010 13:18
par Rapace15
Bon, certes ça n'était pas bien compliqué, mais n'y a-t-il pas plus simple que ça ?

Code : Tout sélectionner

_TrayIconDelete($MonIconTray)   ; Je masque l'IconTray actuel
Run(@ScriptFullPath)            ; Je relance mon script
exit(0)                 ; je quitte le script actuel
 
Merci d'avance.

Re: [..] Actualiser IconTray

Posté : mer. 02 juin 2010 14:10
par Tlem
Rapace15 a écrit :l'agressivité n'est souvent pas la meilleures des réponses (me semble-t-il).
Ce n'était absolument pas de l'agressivité, mais tout simplement une remarque.

A la lecture de vos messages, à 17H14, vous remerciez de l'aide en expliquant que cela fonctionne 'du feu de dieu'.
Je suppose donc qu'à cet instant, vous avez téléchargé et essayé l'UDF ModerMenuLib. :roll:

37 mn plus tard, vous signalez un problème lié à vos recherches. Je suppose donc que vous vous êtes retrouvé confronté à un problème dans cet espace de temps.
Ce qui m'amène à penser que vous avez cherché une solution, mais que cette recherche n’a pas durée plus de 37mn ... Ce qui me parait un peut juste. :roll:

Je n'ai rien contre vous, je fait simplement remarqué que parfois les recherches de solutions sont un peut légères et que l'on à trop tendance à écrire un message qui souvent (en témoigne votre réponse http://www.autoitscript.fr/forum/viewto ... 487#p32487) trouve sa réponse dans les 24 heures qui suivent. :wink:

Re: [..] Actualiser IconTray

Posté : mer. 09 juin 2010 10:03
par Rapace15
Suivant vos conseils, j'ai attendu un peu avant de marquer ce post comme résolu...

en fait la méthode que j'ai donné me pose un problème... Je ne sais pas pourquoi et encore moins comment, mais en faisant comme cela :

Code : Tout sélectionner

Run(@ScriptFullPath)            ; Je relance mon script
la commande me lance une ancienne version du programme (cf les deux a propos retournés) !


Je ne sais pas si c'est important, mais mon programme compilé se trouve dans %userprofile%\Menu Démarrer\Programmes\Démarrage lorsque je le mets ailleurs, il n'est même pas relancé.

Je n'y comprends plus rien...
Bien sur entre les deux versions de grandes avancées ont été faites

Merci de votre aide.

Re: [..] Actualiser IconTray

Posté : mer. 09 juin 2010 11:52
par Tlem
Il n'y a pas trop de logique à votre problème, mais au cas ou, essayez de remplacer votre Run par une des deux lignes suivante :

Code : Tout sélectionner

Run(@ScriptFullPath, @ScriptDir)
; Ou
Run('"' & @ScriptFullPath & '"', '"' & @ScriptDir & '"')
@ScriptFullPath renvoi le chemin complet de l'exécutable avec le nom de celui-ci. Donc en fait il pointe sur lui-même. Mais bien évidement il faut que celui-ci soit compilé pour pouvoir tester dans les bonnes conditions. ;)

Re: [..] Actualiser IconTray

Posté : mer. 09 juin 2010 13:11
par Rapace15
Même résultat. voici le code exact que j'utilise :

Code : Tout sélectionner

$InstDir = @ScriptDir
$MonScript = '"' & $InstDir & '\SysTray.exe"'
Run($MonScript, '"' & $InstDir & '"') ; Je relance mon script
exit (0) ; je quitte le script actuel
 
Quelqu'un pourrait-il confirmer ma "théorie de l'échec" ?

en fait lorsque je le relance, il ne se lance pas (puisqu'il est lancé) et le exit le ferme.

Je pensais donc passé par une fonction qui créerai mon iconTray, et lorsque je clique sur actualiser, il efface bien mon icontray, m'affiche bien l'icon, mais les commandes ne fonctionnent plus (il ne passe plus dans ma fonction de gestion des évènements.
Voici ma fonction d'actualisation (case $Actual

Code : Tout sélectionner

Func MenuEvents()

    global $Msg = @GUI_CtrlId
    Local $cmd = $commands.Item($Msg)
MsgBox(0,"je péasse","ici avec " & $Msg)
    Switch $Msg
        Case $GUI_EVENT_CLOSE, $ExitGui
            ; On ferme le A propos
            GUISetState(@SW_HIDE)
        Case $aboutItem
            about()
        Case $Actual
            _TrayIconSetState($TrayIcon1, 2) ; Hide icon
            ; réinitialisation de l'icontray
            $TrayIcon1 = 0
            $commands=0
            CreateTray()
            _TrayIconSetState($TrayIcon1, 2) ; Show icon

        Case $ExitItem
            ExitScript()
        Case $MajItem
            VerifMaj(true)
        Case Else
            ShellExecute($cmd)
    EndSwitch

EndFunc   ;==>MenuEvents
 
Lorsque je retourne sur l'iconTray, la gestion des évènements semble être déactivée...

Re: [..] Actualiser IconTray

Posté : mer. 09 juin 2010 14:51
par Tlem
Je ne comprend pas la deuxième partie de votre problème !!!

Par contre votre code :

Code : Tout sélectionner

$InstDir = @ScriptDir
$MonScript = '"' & $InstDir & '\SysTray.exe"'
Run($MonScript, '"' & $InstDir & '"') ; Je relance mon script
exit (0) ; je quitte le script actuel
n'a aucun intérêt, car si pour une raison ou une autre l'exécutable ne porte pas le même nom, alors le code ci-dessus ne fonctionnera plus ...
Donc remplacez les trois premières lignes par :

Code : Tout sélectionner

Run(@ScriptFullPath, @ScriptDir) ; Je relance mon script
qui fonctionne parfaitement chez moi. :wink:

Re: [..] Actualiser IconTray

Posté : jeu. 10 juin 2010 10:18
par Rapace15
OK effectivement cela marche... Mais autre problème : Je me retrouve avec 2 IconTray lancées.

Mon programme se retrouve plusieurs fois dans la liste des process, j'ai donc décidé de Killer le process sur lequel je suis, ma fonction actualiser devient ceci

Code : Tout sélectionner

        Case $Actual
            $nProc = ProcessExists(@ScriptName) ; Je récupère le PID de l'IconTray actuelle
            Run(@ScriptFullPath, @ScriptDir)        ; Je lance une nouvelle IconTray
            _TrayIconDelete($TrayIcon1)         ; J'efface l'IconTray Initiale
            ProcessClose($Pid)              ; Je clos le process de l'IconTray Initiale
 
Ça a l'air de fonctionner, mais si tu vois un "défaut", peux-tu me le signaler ? Merci encore de ton aide précieuse.

Re: [..] Actualiser IconTray

Posté : jeu. 10 juin 2010 22:22
par Tlem
Normalement, ceci suffit :

Code : Tout sélectionner

        Case $Actual
            Run(@ScriptFullPath, @ScriptDir)
            Exit(0)
Par contre, il se peut que vous voyez quand même un double icône dans le systray. Mais si vous passez la souris dessus, un des deux disparaitra ...

Re: [..] Actualiser IconTray

Posté : lun. 14 juin 2010 16:59
par Rapace15
J'avais plusieurs process dans mon gestionnaire de tache. C'est pourquoi j'ai géré avec un ProcessClose().

Pour moi le problème est résolu.. Merci de votre aide.