Page 1 sur 1

[R] Fonction si la fenêtre est différente de la première  

Posté : mar. 27 juil. 2010 11:13
par Sh4dows
Salut /all !

Me voici avec un nouveau petit problème qui persiste :roll: je dirais même qui me ronge :lol:
Bref, depuis environ 2 jours je tente de le résoudre mais sans succès...

Je tente d'appeler une fonction si la fenêtre de l'utilisateur est différente de la précédente. Une fois la fonction appelé elle s'exécute en boucle or c'est surtout ce que je ne veut pas :roll:

Voici mon code :

Code : Tout sélectionner

#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

GUICreate("iAutoit", 330, 90, 436, 312)
$Button1 = GUICtrlCreateButton("Touch Me !", 40, 16, 257, 57, $WS_GROUP)
GUISetState(@SW_SHOW)

Global $oldWin, $win
Global $pageName[100]
$pageName[0] = "Sans titre - Bloc-notes"

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
        Case $Button1
            GUISetState(@SW_HIDE)
            While 1
                $win = WinGetTitle("")
                For $i = 0 to 99
                    If $win = $pageName[$i] Then
                        _MESSAGE()
                        $oldWin = $win
                        $win = ""
                    EndIf
                Next
            WEnd
    EndSwitch
WEnd

Func _MESSAGE()
    MsgBox(64, "Coucou", "Bonjour à la communauté autoitscript.fr")
EndFunc
 
Lors d'un changement de fenêtre, la fonction est appelé en boucle et la condition semble être sauté !
Comment résoudre ce problème ?

Merci d'avance pour vos futur réponses.


Cordialement Sh4dows

Re: [..] Fonction si la fenêtre est différente de la première

Posté : mar. 27 juil. 2010 11:47
par sksbir
Bonjour

Je dirais qu'il y a une petite erreur de raisonnement.

Si tu utilises win et oldwin pour déterminer qu'il faut appeler ta fonction, alors il devrait y avoir qqpart un test du genre if win<>oldwin et dans ce test, tu executes oldwin=win.

Or là, je vois bien l'exécution, mais pas le test ?

Par ailleurs, je vois 2 "while 1 / wend" dans ton script, mais nulle part un 'exitloop'... pas étonnant que ça boucle ! :)

Re: [..] Fonction si la fenêtre est différente de la première

Posté : mar. 27 juil. 2010 12:01
par Sh4dows
Tous d'abord j'ai enlever la GUI car elle servait juste d'exemple !
donc :

Code : Tout sélectionner

Global $win, $oldWin = WinGetTitle("")
Global $pageName[100]
$pageName[0] = "Sans titre - Bloc-notes"

While 1
    $win = WinGetTitle("")
    For $i = 0 to 99
        If $oldWin = $pageName[$i] and $win <> $oldWin Then
                _MESSAGE()
                $oldWin = $win
                $win = ""
        EndIf
    Next
WEnd

Func _MESSAGE()
    MsgBox(64, "Coucou", "Bonjour à la communauté autoitscript.fr")
EndFunc
 
Dans ce code je n'est pas une seul fois la fonction d'appelé !

Re: [..] Fonction si la fenêtre est différente de la première

Posté : mar. 27 juil. 2010 12:13
par sksbir
je ne vois pas à quoi sert ton tableau ?

Code : Tout sélectionner

While 1
    $win = WinGetTitle("[active]")
    If $win <> $oldWin Then
        _MESSAGE()
        $oldWin = $win
     EndIf
WEnd
 

Re: [..] Fonction si la fenêtre est différente de la première

Posté : mar. 27 juil. 2010 13:01
par Jerome
Coucou,

Je suis d'accord avec sksbir, voici un code fonctionnel.

Code : Tout sélectionner

#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

GUICreate("iAutoit", 330, 90, 436, 312)
$Button1 = GUICtrlCreateButton("Touch Me !", 40, 16, 257, 57, $WS_GROUP)
GUISetState(@SW_SHOW)

Global $oldWin, $win

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
        Case $Button1
            GUISetState(@SW_HIDE)
            While 1
                $win = WinGetTitle("[active]")
                If $win <> $oldWin Then
                    _MESSAGE()
                    $oldWin = $win
                EndIf
            WEnd
    EndSwitch
WEnd

Func _MESSAGE()
    MsgBox(64, "Coucou", "Bonjour à la communauté autoitscript.fr")
EndFunc
 


Jérôme

Re: [..] Fonction si la fenêtre est différente de la première

Posté : mar. 27 juil. 2010 13:27
par Sh4dows
Oué, effectivement si vous ne savez pas a quoi sert mon tableau on va pas y arriver :lol:
Enfaite mon tableau me permet de savoir quelle application à était utilisé, je veux que si par exemple bloc note à la fenêtre active d'ou mon "Sans titre - Bloc-notes" et que l'on bascule sur la calculatrice "Calculatrice" par exemple alors on appelle ma fonction : "_MESSAGE()".

Le tableau me permet donc d'établir une liste au préalable des nom des fenêtres.

J'utilisais ma boucle pour vérifier qu'une valeur correspondait bien a une présente dans mon tableau :

Code : Tout sélectionner

If $win = $pageName[$i] Then
 
Pour récapituler si la fenêtre présente dans le tableau a était activer et quelle à changer par la suite en une autre quelconque non présente dans le tableau alors on appelle la fonction !

Re: [..] Fonction si la fenêtre est différente de la première

Posté : mar. 27 juil. 2010 13:48
par Sh4dows
En gros voici ce que je voulais :

Code : Tout sélectionner

#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

GUICreate("iAutoit", 330, 90, 436, 312)
$Button1 = GUICtrlCreateButton("Touch Me !", 40, 16, 257, 57, $WS_GROUP)
GUISetState(@SW_SHOW)

Global $oldWin, $win
Global $pageName[100]
$pageName[0] = "Sans titre - Bloc-notes"

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
        Case $Button1
            GUISetState(@SW_HIDE)
            While 1
                $win = WinGetTitle("[active]")
                For $i=0 to 99
                    If $win = $pageName[$i] Then
                        If $win <> $oldWin Then
                            _MESSAGE()
                            $oldWin = $win
                        EndIf
                    EndIf
                Next
            WEnd
    EndSwitch
WEnd

Func _MESSAGE()
    MsgBox(64, "Coucou", "Bonjour à la communauté autoitscript.fr")
EndFunc
 
Normalement il marche :lol:

Avez vous des remarques ?

Re: [..] Fonction si la fenêtre est différente de la première

Posté : mar. 27 juil. 2010 14:52
par Jerome
Oui :)

1 : Ben soit plus précis dans ce que tu veux dés le début :)

2 : Ton code, il marche ? Parce que moi non xD

Sinon, es-ce un truc comme sa que tu veux :

Code : Tout sélectionner

#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <Array.au3>

GUICreate("iAutoit", 330, 90, 436, 312)
$Button1 = GUICtrlCreateButton("Touch Me !", 40, 16, 257, 57, $WS_GROUP)
GUISetState(@SW_SHOW)

Global $oldWin, $win
Global $pageName[100]
$pageName[0] = "Sans titre - Bloc-notes"

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
        Case $Button1
            GUISetState(@SW_HIDE)
            For $i=0 to 20
                $win = WinGetTitle("[active]")
                $pageName[$i] = $win
                sleep(200)
            Next
            _ArrayDisplay($pageName)
    EndSwitch
WEnd

Func _MESSAGE()
    MsgBox(64, "Coucou", "Bonjour à la communauté autoitscript.fr")
EndFunc
Si tu peux expliquer clairement ce que tu veux, sa aiderait :)


Edit : En relisant tous ce que ta dit, j'ai fait sa, dis moi si c'est ok...
PS : Lance le script et change 5 fois de fenêtre pour le test...

Code : Tout sélectionner

#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <Array.au3>

GUICreate("iAutoit", 330, 90, 436, 312)
$Button1 = GUICtrlCreateButton("Touch Me !", 40, 16, 257, 57, $WS_GROUP)
GUISetState(@SW_SHOW)

Global $oldWin, $win, $v
Global $pageName[100]
$pageName[0] = "Sans titre - Bloc-notes"

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
        Case $Button1
            GUISetState(@SW_HIDE)
            For $i=1 to 5
                $v = 0
                do
                    $oldWin = $pageName[$i-1]
                    $win = WinGetTitle("[active]")
                    If $win <> $oldWin Then
                        $v = 1
                    EndIf
                Until($v=1)
                $pageName[$i] = $win
                sleep(200)
            Next
            _ArrayDisplay($pageName)
            GUISetState(@SW_SHOW)
    EndSwitch
WEnd




Jérôme

Re: [..] Fonction si la fenêtre est différente de la première

Posté : mar. 27 juil. 2010 17:56
par Sh4dows
Effectivement en ce moment je m'explique plutôt mal :roll:
Mais merci c'est surtout mon dernier code que je voulais !

Il ma fallut un tout petit peu d'aide car je bloquer :lol:

Merci beaucoup pour ton code !!!

[R]