affichage GUI après sortie d'une boucle

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
CrashOv3r
Niveau 1
Niveau 1
Messages : 8
Enregistré le : dim. 02 août 2015 18:42
Status : Hors ligne

affichage GUI après sortie d'une boucle

#1

Message par CrashOv3r »

Bonjour,

J'ai une GUI avec plusieurs boutons dont un qui me sert à entrer dans une boucle afin d'utiliser la fonction _IsPressed comme ceci :

Code : Tout sélectionner

GUISetState(@SW_SHOW)
while 1
   sleep(100)
   $nMsg = GUIGetMsg()
   Switch $nMsg
	  Case $GUI_EVENT_CLOSE
		 Exit
	  Case $bt_menu
		 menu()
	  Case $bt_sous_menu
		 sous_menu()
	  Case $bt_position
		 Local $hDLL = DllOpen("user32.dll")
		 While 1
			 If _IsPressed("46", $hDLL) Then
				 While _IsPressed("46", $hDLL)
					 Sleep(250)
				 WEnd
			   $pos = MouseGetPos(); on récupère la position de la souris
			   MsgBox(0, "Mouse x,y:", $pos[0] & "," & $pos[1]);on l'affiche
			ElseIf _IsPressed("1B", $hDLL) Then
			   ExitLoop
			EndIf
		 WEnd
		 DllClose($hDLL)
   EndSwitch
WEnd
Donc mon problème se trouve à la sortie du while du Case $bt_position. Quand je fais la touche Echap ("1B"), je sors de la boucle pour retourner dans la boucle d'affichage de la GUI,mais là, ma GUI se ferme au bout de quelques secondes. Je ne comprends pas pourquoi ! J'aimerai que ma GUI reste affichée.

Quelqu'un aurait il une idée ?
J'espère avoir été assez clair dans mon explication ;)
merci
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2511
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

Re: affichage GUI après sortie d'une boucle

#2

Message par jguinch »

Par défaut, quand on appuie sur ESC, la GUI se ferme.
Donc soit faut faire autrement, soit tu peux désactiver la fermeture de la GUI à l'appui de la touche ESC en ajoutant ça (au début) :
 AutoItSetOption ( "GUICloseOnESC" , 0 )
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 1020
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

Re: affichage GUI après sortie d'une boucle

#3

Message par walkson »

Bonsoir,
Le problème vient d'ailleurs ! pour avoir testé ceci
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <Misc.au3>
#Region ### START Koda GUI section ### Form=
Global $Form1 = GUICreate("Form1", 615, 438, 192, 124)
$bt_position = GUICtrlCreateButton("",20,20,100,25)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###


while 1
   sleep(100)
   $nMsg = GUIGetMsg()
   Switch $nMsg
     Case $GUI_EVENT_CLOSE
       Exit

     Case $bt_position
       Local $hDLL = DllOpen("user32.dll")
       While 1
          If _IsPressed("46", $hDLL) Then
             While _IsPressed("46", $hDLL)
                Sleep(250)
             WEnd
            $pos = MouseGetPos(); on récupère la position de la souris
            MsgBox(0, "Mouse x,y:", $pos[0] & "," & $pos[1]);on l'affiche
          ElseIf _IsPressed("1B", $hDLL) Then
            MsgBox(0,"","Echap pressé")
            ExitLoop
         EndIf
       WEnd
       DllClose($hDLL)
   EndSwitch
WEnd
On presse le "button" et un coup d' "échap", on quitte bien la boucle sans fermer la gui
[Edit]
J'ai , peut être, répondu rapidement à votre post..
Après avoir lu le post de jGUICH, je me suis rappelé que ma touche "ECHAP" est quelque peu capricieuse et fonctionne très mal (mais _IsPressed("1B", $hDLL) est toujours reconnu). Autrement dit, il se peut que Jguich ait raison (En général, il a raison) mais testez mon code, à tout hasard, il se peut que Jguich se soit trompé... :P
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
CrashOv3r
Niveau 1
Niveau 1
Messages : 8
Enregistré le : dim. 02 août 2015 18:42
Status : Hors ligne

Re: affichage GUI après sortie d'une boucle

#4

Message par CrashOv3r »

Bonjour,

Et bien que dire à part un grand merci !
J'ai rajouté  AutoItSetOption ( "GUICloseOnESC" , 0 ) et ça fonctionne à merveille (du moins pour le moment) ;)

C'est super encore merci.
Cordialement.
Répondre