Dans mon programme, je complète ou modifie le comportements des commandes système : minimiser, restaurer, agrandir, fermer. Seulement, lorsque le programme est occupé à un job intensif, ces fonctions associées à ces évènement système ne se déclenchent pas tout de suite. Le travail système afférent directement à Windows est lui bien effectué (minimiser minimise bien l'interface), mais l'évènement reste dans la file d'attente pour être traité au retour dans la boucle de traitement des GUIGetMsg(). Ce qui donne des comportements étranges.
Par exemple, ici, dans ce code, si Intensif() est en cours et que je clique minimiser, l'interface se minimise bien mais ne va pas en systray... Par contre, le message étant toujours dans la pile, et même si j'ai restauré la fenêtre entre temps, ça va en systray dès que Intensif() est terminé : ce qui n'a aucun sens vu de l'utilisateur.
Comment faire que Min2Tray() soit bien déclenché lorsque l'interface est minimisée, et ce en toute circonstance, même si un travail intensif est en cours ?
Code : Tout sélectionner
#include <Constants.au3>
#include <GUIConstantsEx.au3>
#include <ie.au3>
Opt("GuiOnEventMode", 0)
Opt("TrayOnEventMode", 1)
Opt("TrayMenuMode", 1)
Opt("TrayAutoPause", 0)
Opt("TrayIconHide", 1)
$ui = GUICreate("Responsive Min2Tray", 600, 500)
$cmd = GUICtrlCreateButton("GO", 10, 10, 75, 25)
$wb = _IECreateEmbedded()
GUICtrlCreateObj($wb, 10, 40, 580, 450)
GUISetState()
While 1
Switch GUIGetMsg()
Case $cmd
GUICtrlSetState($cmd, $GUI_DISABLE)
Intensif()
GUICtrlSetState($cmd, $GUI_ENABLE)
Case $GUI_EVENT_MINIMIZE
Min2Tray()
Case $gui_EVENT_CLOSE
Exit(0)
EndSwitch
WEnd
Func Intensif()
Local $idx, $urls[2], $sel
$urls[0] = "http://google.com"
$urls[1]= "http://microsoft.com"
For $idx = 0 to 50
$sel = Mod($idx, 2)
_IENavigate($wb, $urls[$sel], 0)
Sleep(3000)
Next
EndFunc
Func Min2Tray()
GUISetState(@SW_HIDE, $ui)
TraySetOnEvent($TRAY_EVENT_PRIMARYUP, "Restore")
TraySetToolTip("click to restore")
Opt("TrayIconHide", 0)
Return $ui
EndFunc
Func Restore()
GUISetState(@SW_SHOW, $ui)
WinActivate($ui)
TraySetState(2)
Opt("TrayIconHide", 1)
EndFunc