Script AutoIt bloqué : ma fenêtre ne se met plus à jour

Aide sur les Interfaces Graphique Utilisateurs (GUI).
Règles du forum
.
Répondre
louiseravot
Niveau 1
Niveau 1
Messages : 11
Enregistré le : sam. 26 juil. 2025 17:12
Status : Hors ligne

Script AutoIt bloqué : ma fenêtre ne se met plus à jour  

#1

Message par louiseravot »

Bonjour à tous,

Je débute sur AutoIt et je rencontre un petit souci avec un script qui gère une fenêtre simple.
Le problème : la fenêtre ne se met plus à jour après un certain point du script, comme si elle se figeait.

J'ai pourtant utilisé GUISetState() et même ajouté quelques Sleep(), mais rien n’y fait.
Est-ce que quelqu’un aurait une idée de ce qui peut bloquer l’interface ?
Peut-être une boucle mal faite ou une mauvaise gestion des événements ?

Voici le comportement recherché :

mettre à jour un label en continu

garder la fenêtre responsive

Et voici le comportement réel :

la fenêtre s’affiche mais devient figée

Si un expert a une piste, je suis preneur. Merci d'avance pour votre aide !
Avatar du membre
Nine
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 144
Enregistré le : ven. 17 avr. 2020 01:23
Localisation : Montréal, Québec
Status : Hors ligne

Re: Script AutoIt bloqué : ma fenêtre ne se met plus à jour

#2

Message par Nine »

Sans code, ça va être difficile. On peut juste jouer à la devinette. Une erreur fréquente est d'avoir une seconde boucle appelée dans la boucle principale du GUI.
TotoDev
Niveau 1
Niveau 1
Messages : 4
Enregistré le : jeu. 25 déc. 2025 14:18
Status : Hors ligne

Re: Script AutoIt bloqué : ma fenêtre ne se met plus à jour

#3

Message par TotoDev »

Salut !
Je suis d'accord avec Nince,sans code, c'est compliqué !
Voici un début de réponse
Le problème est classique quand on débute : ta fenêtre se fige parce que ton script ne traite pas les événements Windows pendant qu'il travaille.
La solution : ajoute une boucle de messages dans ton code, donc -> au lieu de faire ton traitement en continu, tu dois utiliser :

While 1
$msg = GUIGetMsg()
If $msg = $GUI_EVENT_CLOSE Then Exit

; Ton code de mise à jour du label ici
GUICtrlSetData($label, "Nouveau texte")

WEnd
Le truc : GUIGetMsg() permet à Windows de rafraîchir ta fenêtre et de gérer les clics/déplacements. Sans ça, ta GUI reste "bloquée".
Si tu as un traitement long, tu peux aussi :

Découper ton code en petites étapes
Utiliser AdlibRegister() pour exécuter une fonction périodiquement
Regarder du côté de GUIOnEventMode pour un mode événementiel

N'hésite pas à partager ton code si tu as encore du mal, ça sera plus facile de t'aider
Bon courage!!
Répondre