[..] Mise en attente d'un clic via GUI

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
cortx
Niveau 5
Niveau 5
Messages : 115
Enregistré le : dim. 04 mai 2008 16:10
Status : Hors ligne

[..] Mise en attente d'un clic via GUI

#1

Message par cortx »

Bonjour;

Je souhaite faire une fenêtre GUI regroupant une liste de script qu'il serait possible d'exécuter via des boutons.

Or pour un des script, il faut que ma souris soit positionné à un endroit spécifique pour que celui ci fonctionne d'où la fonction HotKeySet que j'utilise actuellement et que je déclenche avec un raccourci clavier.
Ça fonctionne mais ce n'est pas pratique de manipuler la souris et le raccourcis clavier, et c'est aussi qu'il me faut autant de raccourcis facile à mémoriser que j'ai de script à intégré à ma GUI

Code : Tout sélectionner

Func fonction_ack()

    MouseClick ( "right")
        sleep (100)
        send ( 'm' )
        sleep (100)
        send ( 'a' )

fonction_pause()
En gardant le même code, je souhaite que lorsque je clique sur le bouton de mon menu GUI, le script attende que je clic avec ma souris sur l'endroit ou il doit lancer le script.
Et si au bout d'un certain temps, imaginons 5 secondes je n'ai pas cliqué, la demande s'annule et le programme reviens à son état initial, c'est à dire rien faire si ce n'est afficher ma GUI. A ca je vais ajouter une fonction qui vérifie le nom de la fenêtre pour empêcher l'exécution du script sur une mauvaise fenêtre, via le nom de celle ci c'est faisable.

Comment puis je m'y prendre donc pour faire une tempo sur une action clic souris.
Je sais faire des envoie de simulation de clic mais pas des attentes de vrai clic.

De plus, pour la tempo des 5 secondes que je veux faire en plus pour éviter de planter le script je pensais utiliser la fonction pause, mais si je ne me trompe pas, je ne peux pas car pause va carrément arrêter le script et pas en faire une tempo, donc pendant la pause, il ne prendra pas en compte mon clic.

Merci d'avance et mes meilleurs vœux à tous.
Avatar du membre
zeshrek
Niveau 10
Niveau 10
Messages : 984
Enregistré le : mer. 17 nov. 2010 09:31
Localisation : Sur ma chaise
Status : Hors ligne

Re: [..] Mise en attente d'un clic via GUI

#2

Message par zeshrek »

snif ! snif !... Mais... on dirait que ca sent le bot ici non ?
Franchement ca a des vieux airs de bot ta toolbox de scripts... Mais bon, comme le doute doit profiter a l'accusé, je vais quand même éssayer de t'apporter des éléments de réponse...
Pour ton histoire de temporisation de 5 secondes, je te suggèrere un timerinit, et une boucle avec un sleep (de 100ms apr ex) et un timerdiff qui sort au bout des 5s
Et pour la souris, tu as _IsPressed().
Si vis pacem para bellum
cortx
Niveau 5
Niveau 5
Messages : 115
Enregistré le : dim. 04 mai 2008 16:10
Status : Hors ligne

Re: [..] Mise en attente d'un clic via GUI

#3

Message par cortx »

erase du message par erreur.

Merci pour ton aide.
Modifié en dernier par cortx le dim. 09 janv. 2011 12:23, modifié 2 fois.
Avatar du membre
TommyDDR
Modérateur
Modérateur
Messages : 2130
Enregistré le : mar. 22 juil. 2008 21:55
Localisation : Nantes
Status : Hors ligne

Re: [..] Mise en attente d'un clic via GUI

#4

Message par TommyDDR »

Voila une fonction qui met en pause le programme jusqu'à ce qu'un clic est détecté.
► Afficher le textecode
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
cortx
Niveau 5
Niveau 5
Messages : 115
Enregistré le : dim. 04 mai 2008 16:10
Status : Hors ligne

Re: [..] Mise en attente d'un clic via GUI

#5

Message par cortx »

Bonjour;
Bon bah j'ai terminé.

par contre j'ai rencontré un comportement bizarre.
Lorsque je lance un script et que je clique sur une fenêtre, ca s'exécute correctement.
Mais si par erreur je clique dans une zone vide de ma GUI la le script par en sucette, ne sarrette pas et boucle (on peux voir l'incrément des secondes dans la toolbox)

Code : Tout sélectionner

; Script Start - Add your code below here

#include <GUIConstantsEx.au3>
#include <Misc.au3>

Opt('MustDeclareVars', 1)


Example()


Func Example()
    Local $Button_1, $Button_2, $Button_3, $Button_999, $msg, $TimerInit, $TimerDiff, $dll
    ;GUICreate ( "title" [, width [, height [, left [, top [, style [, exStyle [, parent]]]]]]] )
    ;GUICreate("My GUI Button") ; will create a dialog box that when displayed is centered
    ;GUICreate("Contrôle",150,180,1024,1,-1,BitOR(0x00000080,0x00000008,0x08000000)) ; will create a dialog box that when displayed is centered
    GUICreate("Contrôle",150,180,1024,1,-1,BitOR(0x00000008,0x00000008)) ; will create a dialog box that when displayed is centered

    Opt("GUICoordMode", 2)
    $dll = DllOpen("user32.dll")
    ;GUICtrlCreateButton ( "text", left, top [, width [, height [, style [, exStyle]]]] )
    $Button_1 = GUICtrlCreateButton("Relance", 10, 30, 130)
    $Button_2 = GUICtrlCreateButton("Acknowledge", -1, 10)
    $Button_999 = GUICtrlCreateButton("Quitter", -1, 10)
    $TimerInit = 0
    $TimerDiff = 0


ToolTip('Count: ' &$TimerDiff,0,0)
    

    GUISetState()      ; will display an  dialog box with 2 button

    ;Run the GUI until the dialog is closed
    While 1
            
    $TimerInit = 0
    $TimerDiff = 0
    ToolTip('Count: ' &$TimerDiff,0,0)
        
        $msg = GUIGetMsg()
        Select
            
            Case $msg = $GUI_EVENT_CLOSE
                ExitLoop
                
            Case $msg = $Button_1
                $TimerInit = 0
                $TimerDiff = 0
                $TimerInit = TimerInit()
                $TimerDiff = TimerDiff($TimerInit)
                ToolTip('Count: ' &$TimerDiff,0,0)
                while $TimerDiff < 5000
                    $TimerDiff = TimerDiff($TimerInit)
                    ToolTip('Count: ' &$TimerDiff,0,0)
                    Sleep ( 10 )
                    If _IsPressed("01", $dll) Then
                        MouseClick ( "right")
                        sleep (100)
                        send ( 'M' )
                        sleep (100)
                        send ( '{ENTER}' )
                        sleep (500)
                        send ( '{ENTER}' )
                        ExitLoop
                    EndIf
                WEnd
                
            Case $msg = $Button_2
                $TimerInit = 0
                $TimerDiff = 0
                $TimerInit = TimerInit()
                $TimerDiff = TimerDiff($TimerInit)
                ToolTip('Count: ' &$TimerDiff,0,0)
                while $TimerDiff < 5000
                    $TimerDiff = TimerDiff($TimerInit)
                    ToolTip('Count: ' &$TimerDiff,0,0)
                    Sleep ( 10 )
                    If _IsPressed("01", $dll) Then
                    sleep (100)
                    MouseClick ( "right")
                    sleep (100)
                    send ( 'm' )
                    sleep (100)
                    send ( 'a' )
                        ExitLoop
                    EndIf
                WEnd

            Case $msg = $Button_999
                Exit
            EndSelect

    WEnd
DllClose($dll)
EndFunc
Répondre