[R] Besoin de fermer automatiquement une fenetre.

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Avatar du membre
blacksoul305
Membre émérite
Membre émérite
Messages : 957
Enregistré le : ven. 18 mars 2011 11:49
Localisation : Au pays des programmeurs.
Status : Hors ligne

Re: [...] Besoin de fermer automatiquement une fenetre.

#21

Message par blacksoul305 »

Je confirme, très bourrin comme méthode. Envoyer un Send dans le vide a de forte chance de ne pas fonctionner. Par exemple un programme qui prend le focus, un pop-up etc...
Étudiant en 2ème année de Licence Informatique.
Aquhydro
Niveau 3
Niveau 3
Messages : 44
Enregistré le : jeu. 16 août 2012 14:45
Localisation : En bas à droite
Status : Hors ligne

Re: [...] Besoin de fermer automatiquement une fenetre.

#22

Message par Aquhydro »

ça donnerais a peut près ça avec un popup d'erreur pas très sympa?

>"C:\Program Files\AutoIt3\SciTE\..\autoit3.exe" / text at the end of statement (one statement per line).:
Send("{ENTER}")($hwnd, "", "[CLASS:Button; TEXT:Oui]")ErrorStdOut "F:\Script fenetre.au3"
F:\Script fenetre.au3 (5) : ==> Illegal
Send("{ENTER}")^ ERROR
>Exit code: 1 Time: 63.578

Encore une fois (désolé, et merci de votre patience), que faire?

Je tiens a précisé que pour la première fois j'ai eut, une fois, le script qui a fonctionné. La seconde fois il a fait un message d'erreur, mais la première fois, j'étais ravi!
Glouglou.
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [...] Besoin de fermer automatiquement une fenetre.

#23

Message par mikell »

@blacksoul, justement, on n'envoie pas le Send dans le vide puisque la fenêtre qui doit le recevoir est activée à la ligne de code précédente (avec le WinActivate)
Maintenant c'est vrai, il peut toujours y avoir un focus autre créé dans la milliseconde qui sépare les 2 instructions... :roll:
text at the end of statement (one statement per line).
Il me semble que la description de l'erreur est évidente Image
Normalement ça, ça marche

Code : Tout sélectionner

While 1
    If WinExists("[TITLE:Montitre; CLASS:#32770]", "") Then
        $hwnd = WinGetHandle("[TITLE:Montitre; CLASS:#32770]", "")
        WinActivate($hwnd)
        Send("{ENTER}")
    EndIf
    Sleep(10)
Wend
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Aquhydro
Niveau 3
Niveau 3
Messages : 44
Enregistré le : jeu. 16 août 2012 14:45
Localisation : En bas à droite
Status : Hors ligne

Re: [...] Besoin de fermer automatiquement une fenetre.

#24

Message par Aquhydro »

Alors maintenant c'est un peu l'angoisse j'y comprends plus rien :

>"C:\Program Files\AutoIt3\SciTE\..\autoit3.exe" / text at the end of statement (one statement per line).:
F:\Script fenetre.au3 (7) : ==> "Wend" statement with no Matching "While" Statement.:
WEnd

>Exit code : 1 Time : 9.138

Alors qu'en fait il y a un While, quand j'enlève le WEnd, il me dit l'inverse, avec derrière : Sleep(10).

Que puis-je faire?

De plus, dans la version que tu m'as donné, si je dis "winactivate" puis "entrer", en gros il va pas mettre entrer sur le oui, si le non est selectionné il va mettre entrer sur le non? est il possible de noter:
WinActivate($hwnd,"","[Class:button;Text:Oui")?
Merci!
Glouglou.
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [...] Besoin de fermer automatiquement une fenetre.

#25

Message par mikell »

Aquhydro a écrit :"Wend" statement with no Matching "While" Statement.:
WEnd
C'est clairement une erreur de script, mais pas forcément du While, ça peut venir d'un EndIf absent ou mal placé par exemple, ou autre... exemple (cherchez l'erreur) :

Code : Tout sélectionner

$toto=0
While 1
   If $toto=0 Then
       Sleep(10)
   End If
Wend
Aquhydro a écrit : si le non est selectionné il va mettre entrer sur le non?
Absolument
Si la fenêtre l'accepte tu peux essayer (entre le WinActivate et le Send) :

Code : Tout sélectionner

ControlFocus($hwnd,"","[Class:Button;Text:Oui]")
Edit : ya encore une option pour les controles qui résistent au ControlClick :
► Afficher le texte
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Aquhydro
Niveau 3
Niveau 3
Messages : 44
Enregistré le : jeu. 16 août 2012 14:45
Localisation : En bas à droite
Status : Hors ligne

Re: [...] Besoin de fermer automatiquement une fenetre.

#26

Message par Aquhydro »

Alors, tout les problèmes sont a peut près résolus, et un nouveau apparait, qui je pense va me faire changer mon fusil d'épaule :
Lorsque je démare le script, il selectionne la fenetre, puis le message d'erreur disparait, mais, comme si j'avais appuyé sur non, il laisse la fenetre ouverte, pire, il plante cette fenetre que je n'arrive même plus a fermer manuellement. Je me demande donc si il ne serait pas judicieux pour opter pour une solution differente qui serait du genre : Dès que la fenetre de type #32770 apparait, fermer cette fenetre et fermer de nouveau la fenetre (vu que nous serons alors toujours dans la fenetre de simulation) ça pourrait peut etre fonctionner...
Sinon, si vous avez une idée de la raison de mon problème, je suis preneur.
Glouglou.
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [...] Besoin de fermer automatiquement une fenetre.

#27

Message par mikell »

1er test à faire : remplacer le Sleep(10) par un Sleep(2000) et voir ce qui se passe pendant ces 2 secondes
Quelle est l'option de code que tu as retenue et qui fonctionne ?

Sinon si tu choisis l'option fermeture, à essayer pour voir : WinClose("[TITLE:Montitre; CLASS:#32770]")
Ou alors ce genre de script, en travaillant sur les handles de fenêtre pour que d'autres avec le même titre ne se ferment pas
► Afficher le texte
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Aquhydro
Niveau 3
Niveau 3
Messages : 44
Enregistré le : jeu. 16 août 2012 14:45
Localisation : En bas à droite
Status : Hors ligne

Re: [...] Besoin de fermer automatiquement une fenetre.

#28

Message par Aquhydro »

Re, donc, pour le teste de 2000 c'est en cours (j'aurais la réponse dès que la simulation sera finie) et pour le script retenu, pour l'instant c'est lui qui a marché, y'a t'il une erreur?

Code : Tout sélectionner

While 1
    If WinExists("[TITLE:montitre; CLASS:#32770]", "") Then
        $hwnd = WinGetHandle("[TITLE:montitre; CLASS:#32770]", "")
        WinActivate($hwnd)
        ControlFocus("CLASS:Button", "Oui", 6)
        Send("{ENTER}")
    Sleep(2000)
    EndIf
WEnd
Glouglou.
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [...] Besoin de fermer automatiquement une fenetre.

#29

Message par mikell »

Hum
ControlFocus("CLASS:Button", "Oui", 6)
ça me dérange quelque part... les paramètres sont censés concerner la fenêtre qui contient le controle :?
J'aurais préféré qqe chose comme ControlFocus("[CLASS:#32770]", "Oui", 6) ou mieux ControlFocus($hwnd, "", 6)
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Aquhydro
Niveau 3
Niveau 3
Messages : 44
Enregistré le : jeu. 16 août 2012 14:45
Localisation : En bas à droite
Status : Hors ligne

Re: [...] Besoin de fermer automatiquement une fenetre.

#30

Message par Aquhydro »

Alors les trois "fonctionnait" mais plantait la fenetre, là j'attends de voir si la version avec fermeture de fenetre fonctionne...

Merci :)
Glouglou.
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [...] Besoin de fermer automatiquement une fenetre.

#31

Message par mikell »

Donc à tester aussi en plus des 3 autres : ControlSend ($hwnd, "", 6, "{ENTER}")
Tin on est en train de passer en revue tout le fichier d'aide là :mrgreen:
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Aquhydro
Niveau 3
Niveau 3
Messages : 44
Enregistré le : jeu. 16 août 2012 14:45
Localisation : En bas à droite
Status : Hors ligne

Re: [...] Besoin de fermer automatiquement une fenetre.

#32

Message par Aquhydro »

Alors, la fermeture des fenetres fonctionne cette fois ci très bien mais bloque complètement mon fichier excel, donc je me demandais si je pouvais faire en gros :

Code : Tout sélectionner

#Include <WinAPI.au3>

While 1
    If WinExists("[TITLE:jointg1; CLASS:#32770]", "") Then
        $child = WinGetHandle("[TITLE:jointg1; CLASS:#32770]", "")
        $parent = _WinAPI_GetParent($child)    
        WinActivate($child)
        ControlFocus($child,"","[Class:Button;Text:Oui]")
        Send("{ENTER}")
        Sleep(500)
        WinClose($parent)
    If "WinDon'tExists"("[TITLE:jointg1; CLASS:#32770]", "") Then
    Sleep (150000)
    EndIf
    Sleep(10)
Wend
J'ai essayé avec "ElseIf" mais ça marche pas, donc, tu te doute que ma question est : que mettre a la place de "WinDon'tExists"... j'ai cherché dans des fichiers aide j'ai pas trouvé, j'ai surement cherché au mauvais endroit...
Glouglou.
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [...] Besoin de fermer automatiquement une fenetre.

#33

Message par mikell »

:mrgreen:
If WinDontExists("....") ==> If not WinExists("....") ou alors If WinExists("....")=0

Par contre pour le bug avec le fichier excel je pourrai évidemment pas t'aider
ça serait pas plus simple de faire lancer les 4 simulations séparément et directement par autoit ? têt bin que ça serait plus facile à gérer
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Aquhydro
Niveau 3
Niveau 3
Messages : 44
Enregistré le : jeu. 16 août 2012 14:45
Localisation : En bas à droite
Status : Hors ligne

Re: [...] Besoin de fermer automatiquement une fenetre.

#34

Message par Aquhydro »

Bha en fait j'ai re-tenté, ça a marché, et tout va bien désormais, donc je t'en remercie (waw je me répète, mais ça vaut le coup)
Par contre, j'ai voulu voir si en effet ta proposition était pas meilleure, mais le problème c'est que sous excel, il n'y a pas d'adresse pour lancer mes macros,donc en fait c'est encore plus galère...
Glouglou.
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [R] Besoin de fermer automatiquement une fenetre.

#35

Message par mikell »

Hé c'est sympa autoit :mrgreen:

Code : Tout sélectionner

#include <Excel.au3>

$oExcel = _ExcelBookOpen($file, 1)
$oExcel.run("ma_macro")
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Aquhydro
Niveau 3
Niveau 3
Messages : 44
Enregistré le : jeu. 16 août 2012 14:45
Localisation : En bas à droite
Status : Hors ligne

Re: [R] Besoin de fermer automatiquement une fenetre.

#36

Message par Aquhydro »

WWaaaaaw...En effet c'est carrément très sympa!

Dans ce cas là, plutot que de laisser la récurrence à Excel, j'ai plutot intéret à intégrer ma boucle en AutoIt, ... Ce qui veut dire compter sous autoIt le nombre de fenetres windows ouvertes, et dire "si il y a moins de 01 fenetre, lance ma macro, si il y en a plus, ne la lance pas et attends 3 minutes.... "

Donc en gros ce dont j'ai besoin dans l'ordre c'est 1:

Code : Tout sélectionner

#Include <WinAPI.au3>
#include <Excel.au3>

While 1
    If WinExists("[TITLE:title; CLASS:#32770]", "") Then
        $child = WinGetHandle("[TITLE:title; CLASS:#32770]", "")
        $parent = _WinAPI_GetParent($child)    
        WinActivate($child)
        ControlFocus($child,"","[Class:Button;Text:Oui]")
        Send("{ENTER}")
        Sleep(500)
        WinClose($parent)
If Not WinExists(("[TITLE:title; CLASS:#32770]", "") Then
    Sleep(10)

*WinCount*(pour compter le nombre de fenetre windows ouvertes)
If Wincount < 8 Then
$oExcel = _ExcelBookOpen($file, 1)
$oExcel.run("ma_macro1")
$oExcel.run("ma_macro2")
ElseIf Wincount > 8 Then 
Sleep(180000)

Wend
Alors, j'imagine (en vérité je sais) qu'il y a de grosses erreurs : J'ai cherché une fonction pour compter le nombre de fenetre sur le net je ne l'ai pas trouvée, et je n'arrive pour l'instant pas bien a maitriser les formules pour le If then etc...
Modifié en dernier par Aquhydro le mer. 22 août 2012 11:41, modifié 1 fois.
Glouglou.
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [...] Besoin de fermer automatiquement une fenetre.

#37

Message par mikell »

J'ai cru comprendre que les fenêtres qui t'intéressent ont le même titre...
► Afficher le texte
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Aquhydro
Niveau 3
Niveau 3
Messages : 44
Enregistré le : jeu. 16 août 2012 14:45
Localisation : En bas à droite
Status : Hors ligne

Re: [...] Besoin de fermer automatiquement une fenetre.

#38

Message par Aquhydro »

Oula... je comprend pas très bien comment faut que je l'intègre, et ou je met les cas...

Si je comprend a peut près j'aurais tendance à faire ça comme ça ... :
► Afficher le texte
Modifié en dernier par Aquhydro le mer. 22 août 2012 11:41, modifié 1 fois.
Glouglou.
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [...] Besoin de fermer automatiquement une fenetre.

#39

Message par mikell »

Je t'ai donné juste un exemple, dans ton cas ça ressemblerait plutôt à ça
► Afficher le texte
Edit : édité pour cause de connerie :oops:
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Aquhydro
Niveau 3
Niveau 3
Messages : 44
Enregistré le : jeu. 16 août 2012 14:45
Localisation : En bas à droite
Status : Hors ligne

Re: [...] Besoin de fermer automatiquement une fenetre.

#40

Message par Aquhydro »

La réponse que j'ai est :
$oExcel = _ExcelBookOpen($file, 1)
$oExcel.run("ma_macro1")

Error : Variable used without being declared
Glouglou.
Répondre