[..] WinWaitActive, si timeout faire autre chose !

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

[..] WinWaitActive, si timeout faire autre chose !

#1

Message par cortx »

Bonjour;

J'ai un petit souci, je maitrise encore mal les mise en variable de certaine fonction.
Je bosse avec la fonction WinWaitActive

Code : Tout sélectionner

WinWaitActive ( "title" [, "text" [, timeout]] )
Return Value
Success:    Returns handle to the requested window.
Failure:    Returns 0 if timeout occurred.
 

Code : Tout sélectionner

; Script Start - Add your code below here
    HotKeySet("{PAUSE}", "Start")
    HotKeySet("!{PAUSE}","Quit")

Pause()

func Start()

    HotKeySet("{PAUSE}")
    HotKeySet("{PAUSE}", "Pause")

    Activation()
    Pause()

EndFunc



func Activation()
    
    ToolTip('WinWaitActive: Excel',0,0)
    ;WinWaitActive ( "title" [, "text" [, timeout]] )
    WinWaitActive ("Microsoft Excel - Classeur1", "", 5)
        
        Mouseclick ( 'left' )
        sleep(100)
        
        
        Send ('{CTRLDOWN}')
        Send ('v')
        Send ('{CTRLUP}')

        
EndFunc


Func Pause()
    
    ToolTip('Pause',0,0)
    HotKeySet("{PAUSE}")
    HotKeySet("{PAUSE}", "Start")

        While 1
            sleep(100)
        WEnd
        
EndFunc

func Quit()
    Exit
EndFunc
Je laisse donc 5 secondes pour que l'utilisateur active son classeur Excel.
Mais si il ne l'a pas activer, je veux que le script s'annule et donc faire un exit voir même au mieux retourne sur la fonction Pause().
Or dans la fonction tel que je l'ai, même si le classeur n'est pas activé la fonction s'exécute, je ne comprends donc pas la fonction timeout.
L'explication de la fonction étant:
Failure: Returns 0 if timeout occurred.
Je ne sais pas comment utiliser ce retour de fonction, qui me serait bien pratique tout de meme, si c'est égal à 0 je le renvoi en pause et voila mais la je suis gêné.

Code : Tout sélectionner

$i = WinWaitActive ("Microsoft Excel - Classeur1", "", 5)
bah ca marche pas, et je le comprends.


L'autre problème majeur auquel je suis confronté c'est que une fois que le classeur est actif, le script se lance.
C'est un peu gênant dans un classeur Excel, je souhaiterais donc lui recoller une tempo pour demander a l'utilisateur de cliquer sur la cellule à gérer.

Le truc c'est que je peux mettre en place un HotKeySet comme je fait pour mettre en pause mes script mais mettre un HotKeySet sur un click droit de la souris c'est pas pratique, surtout qu'il faut qu'il ne soit interprété que sur le classeur excel et que quant le script est en exécution dans la fonction Activation() uniquement.

Et la je ne vois vraiment pas du tout comment faire, je vois les limites de mes compétences de programmation quant il faut retourner des scripts dans tout les sens pour voir ce que ca va faire.
Donc même si vous n'avez que des pistes et pas les solutions complète je suis preneur, ca m'apprendra à chercher sur cette fonction en particulier.

Bonne journée à vous tous.
Karachi
Niveau 2
Niveau 2
Messages : 26
Enregistré le : mer. 12 mai 2010 21:27
Status : Hors ligne

Re: [..] WinWaitActive, si timeout faire autre chose !

#2

Message par Karachi »

Sinon, tu peux activer toi même le classeur avec WinActivate()...
Avatar du membre
Yogui
Niveau 9
Niveau 9
Messages : 689
Enregistré le : ven. 18 avr. 2008 17:29
Status : Hors ligne

Re: [..] WinWaitActive, si timeout faire autre chose !

#3

Message par Yogui »

Bonsoir

Franchement j'ai rien compris :s

mais pour répondre à une de vos questions l'utilisation de WinWaitActive j'ai modifié un petit peu la fonction activation :

Code : Tout sélectionner

Func Activation()
    ToolTip('WinWaitActive: Excel', 0, 0)
    ;WinWaitActive ( "title" [, "text" [, timeout]] )
    $test = WinWaitActive("Microsoft Excel - Classeur1", "", 5)
    If $test = 0 Then
        MsgBox(0, "", 'timeout')
        Pause()
    Else
        MouseClick('left')
        Sleep(100)
        Send('{CTRLDOWN}')
        Send('v')
        Send('{CTRLUP}')

    EndIf
EndFunc   ;==>Activation
Pouvez vous expliquer ce que doit faire votre script ?
Karachi
Niveau 2
Niveau 2
Messages : 26
Enregistré le : mer. 12 mai 2010 21:27
Status : Hors ligne

Re: [..] WinWaitActive, si timeout faire autre chose !

#4

Message par Karachi »

Ou, sinon tu fais

Code : Tout sélectionner

If WinActive() Then
...
Else 
Exit 0
EndIf
 
cortx
Niveau 5
Niveau 5
Messages : 115
Enregistré le : dim. 04 mai 2008 16:10
Status : Hors ligne

Re: [..] WinWaitActive, si timeout faire autre chose !

#5

Message par cortx »

Bonjour;

Mon script dans son état actuel ne fait que des Ctrl+v dans un classeur excel dans les cellules ou clique l'utilisateur (d'ou mon probleme de tempo pour indiquer la cellule ou faire l'action).
Ca c'est pour bosser sur le script sur une chose simple.

Dans la finalité il va me servir à faire de l'automatisation de tache sur un logiciel car j'ai besoin de faire un clic droit dans une arborescence, et toujours aller au même endroit pour lancer une tache.

Il faut donc que lorsque le script se lance, j'ouvre la fenêtre du logiciel en question, et que je clique sur l'endroit de l'arborescence à gérer.

Ce script va donc me permettre d'automatiser l'action final à chaque fois que je clique sur le dossier.

Yogui, j'avais justement testé ton bout de code mais malheureusement ca ne marche pas il execute quant meme la partie contenue dans le ELSE et la je ne comprends pas pourquoi.
Si je suis dans une autre fenetre que le classeur Excel, au lieu de faire le Ctrl+V directement il attends les 5 secondes, et le fait quant meme.

Code : Tout sélectionner

    $test = WinWaitActive("Microsoft Excel - Classeur1", "", 5)
    If $test = 0 Then
        MsgBox(0, "", 'timeout')
        Pause()
    Else
        MouseClick('left')
        Sleep(100)
        Send('{CTRLDOWN}')
        Send('v')
        Send('{CTRLUP}')

    EndIf
Edit: je viens de retester, là ca marche.
Je comprends pas le pourquoi du comment. Bah merci bien là ca fonctionne comme je veux.
Me reste à régler la fonction permettant de mettre une pause jusqu'a ce que l'utilisateur fasse un clic gauche sur l'endroit qu'il souhaite traiter.

La je vais manger, je verrais ca ce soir.
jajar
Niveau 4
Niveau 4
Messages : 59
Enregistré le : sam. 03 avr. 2010 15:20
Status : Hors ligne

Re: [..] WinWaitActive, si timeout faire autre chose !

#6

Message par jajar »

ou sinon

Code : Tout sélectionner

$win = WinWaitActive("Microsoft Excel - Classeur1", "", 5)
    If $win Then

      MouseClick('left')
        Sleep(100)
        Send('{CTRLDOWN}')
        Send('v')
        Send('{CTRLUP}')

     
    Else
     MsgBox(0, "", 'timeout')
        Pause()

    EndIf
Avatar du membre
Yogui
Niveau 9
Niveau 9
Messages : 689
Enregistré le : ven. 18 avr. 2008 17:29
Status : Hors ligne

Re: [..] WinWaitActive, si timeout faire autre chose !

#7

Message par Yogui »

cortx a écrit :Bonjour;

Mon script dans son état actuel ne fait que des Ctrl+v dans un classeur excel dans les cellules ou clique l'utilisateur (d'ou mon probleme de tempo pour indiquer la cellule ou faire l'action).
Ca c'est pour bosser sur le script sur une chose simple.

Dans la finalité il va me servir à faire de l'automatisation de tache sur un logiciel car j'ai besoin de faire un clic droit dans une arborescence, et toujours aller au même endroit pour lancer une tache.

Il faut donc que lorsque le script se lance, j'ouvre la fenêtre du logiciel en question, et que je clique sur l'endroit de l'arborescence à gérer.

Ce script va donc me permettre d'automatiser l'action final à chaque fois que je clique sur le dossier.

Yogui, j'avais justement testé ton bout de code mais malheureusement ca ne marche pas il execute quant meme la partie contenue dans le ELSE et la je ne comprends pas pourquoi.
Si je suis dans une autre fenetre que le classeur Excel, au lieu de faire le Ctrl+V directement il attends les 5 secondes, et le fait quant meme.

Code : Tout sélectionner

    $test = WinWaitActive("Microsoft Excel - Classeur1", "", 5)
    If $test = 0 Then
        MsgBox(0, "", 'timeout')
        Pause()
    Else
        MouseClick('left')
        Sleep(100)
        Send('{CTRLDOWN}')
        Send('v')
        Send('{CTRLUP}')

    EndIf
Edit: je viens de retester, là ca marche.
Je comprends pas le pourquoi du comment. Bah merci bien là ca fonctionne comme je veux.
Me reste à régler la fonction permettant de mettre une pause jusqu'a ce que l'utilisateur fasse un clic gauche sur l'endroit qu'il souhaite traiter.

La je vais manger, je verrais ca ce soir.

si le problème est solutionné merci de d'éditer le titre de votre premier message pour le passer en résolu [R]
cortx
Niveau 5
Niveau 5
Messages : 115
Enregistré le : dim. 04 mai 2008 16:10
Status : Hors ligne

Re: [..] WinWaitActive, si timeout faire autre chose !

#8

Message par cortx »

Bonjour;

Non le sujet n'est pas totalement valider, il me reste une fonction à mettre en place et quant je l'aurais trouvé je la posterai ici.
il me manque la fonction permettant de faire une pause dans le script afin que l'utilisateur puisse cliquer sur la ligne qu'il souhaite éditer.

Le problème c'est que je le ferai bien avec un HotKeySet mais faire ce genre d'option sur un clic souris ca va être laborieux car il risque de se déclencher à n'importe quel moment.
La l'idée que j'ai en tête, c'est quant même de le faire, mais de lui dire que si la fenêtre n'est pas celle attendu, il ne fait rien.
Ça pourrait marcher, mais la tempo permettant d'attendre cet évènement, je ne me suis pas encore penché dessus.
Karachi
Niveau 2
Niveau 2
Messages : 26
Enregistré le : mer. 12 mai 2010 21:27
Status : Hors ligne

Re: [..] WinWaitActive, si timeout faire autre chose !

#9

Message par Karachi »

Tu peux mettre n'importe quelle touche pour un HotKeySet()... Liste des touches
cortx
Niveau 5
Niveau 5
Messages : 115
Enregistré le : dim. 04 mai 2008 16:10
Status : Hors ligne

Re: [..] WinWaitActive, si timeout faire autre chose !

#10

Message par cortx »

Oui mais le plus simple dans mon cas c'est de mettre le clic justement pour que l'utilisateur soit pas trop gêné avec les appuie clavier, il a juste à cliquer sur la ligne en question, mais je crois effectivement que ca va être le plus simple de mettre une autre touche.

Ha ouai, tant que j'y suis, il y a possibilité de mettre les bouton 4/5 d'une souris ?
Répondre