Page 2 sur 3

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

Posté : lun. 20 août 2012 14:30
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...

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

Posté : lun. 20 août 2012 15:27
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!

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

Posté : lun. 20 août 2012 17:55
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

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

Posté : mar. 21 août 2012 09:31
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!

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

Posté : mar. 21 août 2012 10:02
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

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

Posté : mar. 21 août 2012 11:29
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.

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

Posté : mar. 21 août 2012 13:52
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

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

Posté : mar. 21 août 2012 14:05
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

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

Posté : mar. 21 août 2012 14:16
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)

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

Posté : mar. 21 août 2012 14:22
par Aquhydro
Alors les trois "fonctionnait" mais plantait la fenetre, là j'attends de voir si la version avec fermeture de fenetre fonctionne...

Merci :)

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

Posté : mar. 21 août 2012 14:27
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:

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

Posté : mar. 21 août 2012 15:28
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...

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

Posté : mar. 21 août 2012 16:26
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

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

Posté : mar. 21 août 2012 18:09
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...

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

Posté : mar. 21 août 2012 18:13
par mikell
Hé c'est sympa autoit :mrgreen:

Code : Tout sélectionner

#include <Excel.au3>

$oExcel = _ExcelBookOpen($file, 1)
$oExcel.run("ma_macro")

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

Posté : mer. 22 août 2012 09:15
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...

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

Posté : mer. 22 août 2012 11:10
par mikell
J'ai cru comprendre que les fenêtres qui t'intéressent ont le même titre...
► Afficher le texte

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

Posté : mer. 22 août 2012 11:30
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

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

Posté : mer. 22 août 2012 11:47
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:

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

Posté : mer. 22 août 2012 12:47
par Aquhydro
La réponse que j'ai est :
$oExcel = _ExcelBookOpen($file, 1)
$oExcel.run("ma_macro1")

Error : Variable used without being declared