[R] Besoin de fermer automatiquement une fenetre.
Règles du forum
- Merci de consulter la section "Règles du forum" et plus particulièrement "Règles et Mentions Légales du site autoitscript.fr" avant d'écrire un message.
- blacksoul305
- 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.
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

- 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.
ç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!
>"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.
- mikell
- 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.
@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...

Normalement ça, ça marche
Maintenant c'est vrai, il peut toujours y avoir un focus autre créé dans la milliseconde qui sépare les 2 instructions...
Il me semble que la description de l'erreur est évidentetext at the end of statement (one statement per line).
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 )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
-
Aquhydro
- 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.
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!
>"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.
- mikell
- 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.
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) :Aquhydro a écrit :"Wend" statement with no Matching "While" Statement.:
WEnd
Code : Tout sélectionner
$toto=0
While 1
If $toto=0 Then
Sleep(10)
End If
WendAbsolumentAquhydro a écrit : si le non est selectionné il va mettre entrer sur le non?
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]")► 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 )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
-
Aquhydro
- 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.
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.
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.
- mikell
- 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.
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
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 )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
-
Aquhydro
- 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.
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
WEndGlouglou.
- mikell
- 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.
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)
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 )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
-
Aquhydro
- 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.
Alors les trois "fonctionnait" mais plantait la fenetre, là j'attends de voir si la version avec fermeture de fenetre fonctionne...
Merci
Merci
Glouglou.
- mikell
- 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.
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à
Tin on est en train de passer en revue tout le fichier d'aide là
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
-
Aquhydro
- 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.
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 :
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...
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)
WendGlouglou.
- mikell
- 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.
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 )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
-
Aquhydro
- 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.
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...
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.
- mikell
- 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.
Hé c'est sympa autoit
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 )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
-
Aquhydro
- 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.
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:
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...
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
Modifié en dernier par Aquhydro le mer. 22 août 2012 11:41, modifié 1 fois.
Glouglou.
- mikell
- 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.
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 )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
-
Aquhydro
- 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.
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 ... :
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.
- mikell
- 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.
Je t'ai donné juste un exemple, dans ton cas ça ressemblerait plutôt à çaEdit : édité pour cause de connerie 
► 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 )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
-
Aquhydro
- 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.
La réponse que j'ai est :
$oExcel = _ExcelBookOpen($file, 1)
$oExcel.run("ma_macro1")
Error : Variable used without being declared
$oExcel = _ExcelBookOpen($file, 1)
$oExcel.run("ma_macro1")
Error : Variable used without being declared
Glouglou.
