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

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Sh4dows
Status : Hors ligne

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

#1

Message 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
Modifié en dernier par Sh4dows le mar. 27 juil. 2010 17:57, modifié 1 fois.
Avatar du membre
sksbir
Niveau 7
Niveau 7
Messages : 384
Enregistré le : lun. 26 oct. 2009 17:57
Localisation : Lyon
Status : Hors ligne

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

#2

Message 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 ! :)
Sh4dows
Status : Hors ligne

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

#3

Message 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é !
Avatar du membre
sksbir
Niveau 7
Niveau 7
Messages : 384
Enregistré le : lun. 26 oct. 2009 17:57
Localisation : Lyon
Status : Hors ligne

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

#4

Message 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
 
Avatar du membre
Jerome
Niveau 9
Niveau 9
Messages : 661
Enregistré le : mar. 07 avr. 2009 08:35
Localisation : Picardie
Status : Hors ligne

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

#5

Message 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
Sh4dows
Status : Hors ligne

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

#6

Message 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 !
Sh4dows
Status : Hors ligne

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

#7

Message 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 ?
Avatar du membre
Jerome
Niveau 9
Niveau 9
Messages : 661
Enregistré le : mar. 07 avr. 2009 08:35
Localisation : Picardie
Status : Hors ligne

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

#8

Message 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
Sh4dows
Status : Hors ligne

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

#9

Message 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]
Répondre