besoin d'aide, je tourne en rond... ça n'avance pas
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.
besoin d'aide, je tourne en rond... ça n'avance pas
Bonjour à tous, ou bonsoir
j'ai découvert autoit il y a peu, dans le cadre d'un projet que je souhaite développer, mais je me heurte à un problème : ça ne fonctionne pas!! enfin, pas comme je le voudrais!
Je m'explique, mais tout d'abord, un peu de contexte :
J'utilise un logiciel pour télérelever des informations sur des sites distants, mais ces informations arrivant en continu au fil du temps, chaque nouvelle info écrase la plus ancienne. Afin de n'en perdre aucune, je souhaite faire un script qui va lancer une télérelève de tous mes sites une fois par semaine
problème : le logiciel de télérelève me présente 4 possiblités :
1, ça fonctionne
2, problème de connexion
3, pas d'évènement
4, cartes non formatées
donc j'écris mon script très simplement de la manière suivante
If ça fonctionne, then...
elseif problème de connexion then...
elseif pas d'évènement then...
elseif cartes non formatées then...
dans le cas ou ça fonctionne, tout va bien, toutes les opérations se déroulent correctement
dans le cas où j'ai un problème de connexion, ça plante, et là, je ne comprend pas pourquoi
après avoir parcouru en long, en large et en travers, si je comprends bien tout, c'est soit tu as ça, alors tu fais ça, sinon, ...
après, pour information, ça peut aider, je viens d'y penser :
mon script consiste à sélectionner un site dans une liste, ensuite, choisir plusieurs critères, temporels, ou autres, et ensuite, se connecter au site distant (en 56k, oui, je sais... ça prend du temps) ensuite, rapatrier le contenu, et auquel cas, telle boite de dialogue s'affiche
si le site distant est occupé alors une autre boite de dialogue s'affiche, j'ai donc utilisé le Ifwinexists, then
merci pour votre aide, vraiment
bonne soirée
j'ai découvert autoit il y a peu, dans le cadre d'un projet que je souhaite développer, mais je me heurte à un problème : ça ne fonctionne pas!! enfin, pas comme je le voudrais!
Je m'explique, mais tout d'abord, un peu de contexte :
J'utilise un logiciel pour télérelever des informations sur des sites distants, mais ces informations arrivant en continu au fil du temps, chaque nouvelle info écrase la plus ancienne. Afin de n'en perdre aucune, je souhaite faire un script qui va lancer une télérelève de tous mes sites une fois par semaine
problème : le logiciel de télérelève me présente 4 possiblités :
1, ça fonctionne
2, problème de connexion
3, pas d'évènement
4, cartes non formatées
donc j'écris mon script très simplement de la manière suivante
If ça fonctionne, then...
elseif problème de connexion then...
elseif pas d'évènement then...
elseif cartes non formatées then...
dans le cas ou ça fonctionne, tout va bien, toutes les opérations se déroulent correctement
dans le cas où j'ai un problème de connexion, ça plante, et là, je ne comprend pas pourquoi
après avoir parcouru en long, en large et en travers, si je comprends bien tout, c'est soit tu as ça, alors tu fais ça, sinon, ...
après, pour information, ça peut aider, je viens d'y penser :
mon script consiste à sélectionner un site dans une liste, ensuite, choisir plusieurs critères, temporels, ou autres, et ensuite, se connecter au site distant (en 56k, oui, je sais... ça prend du temps) ensuite, rapatrier le contenu, et auquel cas, telle boite de dialogue s'affiche
si le site distant est occupé alors une autre boite de dialogue s'affiche, j'ai donc utilisé le Ifwinexists, then
merci pour votre aide, vraiment
bonne soirée
- blacksoul305
- Membre émérite
- Messages : 957
- Enregistré le : ven. 18 mars 2011 11:49
- Localisation : Au pays des programmeurs.
- Status : Hors ligne
Re: besoin d'aide, je tourne en rond... ça n'avance pas
Salut et bienvenue.
Je suis désolé mais avec ça, ça va vraiment être compliqué d'aider. On peut pas avoir un code ou bien la partie du code incriminée ?dans le cas où j'ai un problème de connexion, ça plante, et là, je ne comprend pas pourquoi
Étudiant en 2ème année de Licence Informatique.
Re: besoin d'aide, je tourne en rond... ça n'avance pas
Il y a un problème de variable non déclarée ligne 42
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
- blacksoul305
- Membre émérite
- Messages : 957
- Enregistré le : ven. 18 mars 2011 11:49
- Localisation : Au pays des programmeurs.
- Status : Hors ligne
Re: besoin d'aide, je tourne en rond... ça n'avance pas
Ah, au temps pour moi, j'avais pas vue
Étudiant en 2ème année de Licence Informatique.
Re: besoin d'aide, je tourne en rond... ça n'avance pas
Merci pour ton acceuil
Je tente de te joindre un morceau du code, je n'ai pas tout mis, donc il n'y a pas les endif, parce que sinon, il y en a 924 lignes, et encore, j'ai simplifié, bon, et ça, c'est pour un seul site, j'en ai une bonne quinzaine à télérelever les uns à la suite des autres,
Je m'explique, If If WinExists("", " TS rapatriées ") signifie qu'à l'issue de ma connexion, le site distant a répondu, et les télésignalisations sont rapatriées, le cas échéant, le les converti en fichier texte, et ensuite, je colle ça sur mon rapport,
ElseIf WinExists($sEvalString2, " PAS D'EVENEMENTS DANS LA PERIODE SPECIFIEE ") sinon, si c'est cette fenêtre qui s'ouvre, j'entame une autre série d'action...
quand j'essaye, si ça fonctionne, et ben tout va bien, par contre, si la fenêtre " PAS D'EVENEMENTS DANS LA PERIODE SPECIFIEE " s'ouvre, alors il ne se passe rien, on dirait qu'il attends que "", " TS rapatriées " s'ouvre avant de continuer à dérouler sa liste d'ordre, alors que justement, le but étant que si cette fenêtre ne s'ouvre pas, alors on regarde la condition suivante, et ainsi de suite
Le hic dans l'histoire, c'est qu'il n'est défini à aucun moment combien de temps il doit attendre, je pense que c'est peut être là que réside la problème, mais là...
Je tente de te joindre un morceau du code, je n'ai pas tout mis, donc il n'y a pas les endif, parce que sinon, il y en a 924 lignes, et encore, j'ai simplifié, bon, et ça, c'est pour un seul site, j'en ai une bonne quinzaine à télérelever les uns à la suite des autres,
Je m'explique, If If WinExists("", " TS rapatriées ") signifie qu'à l'issue de ma connexion, le site distant a répondu, et les télésignalisations sont rapatriées, le cas échéant, le les converti en fichier texte, et ensuite, je colle ça sur mon rapport,
ElseIf WinExists($sEvalString2, " PAS D'EVENEMENTS DANS LA PERIODE SPECIFIEE ") sinon, si c'est cette fenêtre qui s'ouvre, j'entame une autre série d'action...
quand j'essaye, si ça fonctionne, et ben tout va bien, par contre, si la fenêtre " PAS D'EVENEMENTS DANS LA PERIODE SPECIFIEE " s'ouvre, alors il ne se passe rien, on dirait qu'il attends que "", " TS rapatriées " s'ouvre avant de continuer à dérouler sa liste d'ordre, alors que justement, le but étant que si cette fenêtre ne s'ouvre pas, alors on regarde la condition suivante, et ainsi de suite
Le hic dans l'histoire, c'est qu'il n'est défini à aucun moment combien de temps il doit attendre, je pense que c'est peut être là que réside la problème, mais là...
Code : Tout sélectionner
WinActivate("", " Libellés tranche sélectionnés ")
WinWaitActive("", " Libellés tranche sélectionnés ")
; Atteindre le site
Send("{DOWN 46}")
; Choix du critère de sélection "depuis 1 semaine"
Send("{TAB 7}{UP 5}{DOWN}")
; Choix de la voie : Imprimantes 1 et 2
Send("{TAB}{UP 4}{DOWN 2}")
; Appui sur le bouton de connexion "Distante"
Send("{TAB}{ENTER}")
If WinExists("", " TS rapatriées ") Then
; Commande de convertion des TS du site de en fichier texte "Convertir"
Send("!v")
; La fenêtre de sauvegarde s'ouvre
WinWaitActive($sEvalString2)
Send("{ENTER}")
Sleep(500)
; Demande de raccrochage
Send("!R")
Sleep(500)
Send("{ENTER}")
WinWaitActive("", " Libellés tranche sélectionnés ")
; Rapport de connexion au site
WinActivate("Rapport de télérelève")
WinWaitActive("Rapport de télérelève")
Send("{TAB}Connexion : OK{ENTER}{ENTER}{TAB}Télésignalisations rapatriées :{ENTER}{ENTER}{ENTER}{ENTER}{UP 2}")
Sleep(500)
; Modification de la police de caractères pour le collage des TS
Send("!lodS{DOWN 14}{TAB}{DOWN 7}{RIGHT 4}{ENTER}u{TAB 6}{ENTER}!t{TAB}{DOWN 4}{ENTER}{TAB}{ENTER}")
Sleep(500)
Send("!lpoarial{TAB}8{ENTER}")
; démarrage du fichier texte créé
ShellExecute($sEvalString3)
WinWaitActive($sEvalString4)
; Sélection de tout le texte
Send("^a")
; Copie de l'ensemble du texte
Send("^c")
; Activation de la fenêtre du fichier Word
WinActivate("Rapport de télérelève")
WinWaitActive("Rapport de télérelève")
Sleep(500)
; Copie du texte
Send("{ENTER}")
send("^v")
send("{DOWN 2}{TAB}")
send("Le rapatriement des télésignalisations est terminé")
send("{ENTER}{ENTER}")
send("Déconnexion de la TM3000 de ")
send($sEvalString)
send("{TAB 6}")
Send("le " & _NowDate())
Send("{space}")
Send("à " & _NowTime())
Sleep(500)
Send("{ENTER}{ENTER}{ENTER}")
Send("!la Télérelève du site de ")
send($sEvalString)
send(" terminée")
send("{ENTER}")
Send("!lods{UP 25}{DOWN 6}{TAB}{DOWN}{ENTER}u{TAB 5}{ENTER}{TAB 3}{ENTER}{DOWN}")
send("!sa")
; Activation de la fenêtre du fichier TXT
WinActivate($sEvalString4)
WinWaitActive($sEvalString4)
; Fermeture du fichier TXT
Send("!fq")
; Suppression du fichier TXT
FileDelete($sEvalString3)
; Réactiver le fichier du rapport de télérelève
WinActivate("Rapport de télérelève")
WinWaitActive("Rapport de télérelève")
Sleep(500)
; If 2 : Pas d'évènement dans la période spécifée
ElseIf WinExists($sEvalString2, " PAS D'EVENEMENTS DANS LA PERIODE SPECIFIEE ") Then
Send("{TAB}{ENTER}")
WinWaitActive("", " Libellés tranche sélectionnés ")
Sleep(500)
WinActivate("Rapport de télérelève")
WinWaitActive("Rapport de télérelève")
Sleep(500)
Send("Pas d'évènement dans la période spécifiée avec les critères sélectionnés,")
send("{ENTER}")
send("Déconnexion de la TM3000 de ")
send($sEvalString)
send("{TAB 5}")
Send("le " & _NowDate())
Send("{space}")
Send("à " & _NowTime())
Sleep(500)
Send("{ENTER}{ENTER}Une seconde tentative est réalisée sur les autres voies...{ENTER}{ENTER}Critères sélectionnés :{ENTER}{TAB}- Depuis 1 semaine{ENTER}Autres voies{ENTER}{BS 3}{ENTER}") ; renvoi à la ligne
Sleep(500)
WinActivate("", " Libellés tranche sélectionnés ")
WinWaitActive("", " Libellés tranche sélectionnés ")
Sleep(100)
Send("{TAB 8}{DOWN}{TAB}{ENTER}")
- blacksoul305
- Membre émérite
- Messages : 957
- Enregistré le : ven. 18 mars 2011 11:49
- Localisation : Au pays des programmeurs.
- Status : Hors ligne
Re: besoin d'aide, je tourne en rond... ça n'avance pas
Re,
Aie aie ! Ça c'est du code qu'on appelle "code carton" ou "code bricolage", parce que tout est à base de "Send", ainsi, si l'environnement dans lequel est exécuté le programme bouge, tout se casse la figure. C'est pas fiable du tout. Maintenant c'est normal si tu viens de découvrir AutoIt.
L'idée est donc dans un premier temps de se débarrasser de tout ça. Si j'ai bien compris, tu utilises un programme pour récupérer tes infos, ce programmeest-il sous forme d'interface graphique ?(à priori oui d'après les commentaires). Si c'est le cas tu peux utiliser l'utilitaire de scite AutoIt Window Info tool ou encore Control Viewer, qui te permettront de récupérer le handle de tous les éléments de l'interface pour non seulement interagir avec (clique sur bouton, entrée de texte) ou bien lire des champs d'entrées, tout ça à l'aide des fonctions Controlxxx.
Une fois que ce système sera mis en place, ça sera déjà plus évident de déboguer ton programme.
Aie aie ! Ça c'est du code qu'on appelle "code carton" ou "code bricolage", parce que tout est à base de "Send", ainsi, si l'environnement dans lequel est exécuté le programme bouge, tout se casse la figure. C'est pas fiable du tout. Maintenant c'est normal si tu viens de découvrir AutoIt.
L'idée est donc dans un premier temps de se débarrasser de tout ça. Si j'ai bien compris, tu utilises un programme pour récupérer tes infos, ce programme
Une fois que ce système sera mis en place, ça sera déjà plus évident de déboguer ton programme.
Étudiant en 2ème année de Licence Informatique.
Re: besoin d'aide, je tourne en rond... ça n'avance pas
Je me doutais bien que c'était un code en carton, ceci dit, l'environnement n'est pas amené à évoluer, donc, en soit, ça me suffisait, bon, bien entendu, je suis là pour évoluer aussi,
Oui, c'est une interface graphique,
je vais m'informer sur ce que tu me proposes, et je vois ensuite, par contre, ça ne m'explique pas pourquoi lorsque qu'il n'a pas sa condition du if il ne continue pas sur le elseif
Bon, je regarde ce que tu me dis, et je tente un quelque chose dans la semaine
merci beaucoup
Oui, c'est une interface graphique,
je vais m'informer sur ce que tu me proposes, et je vois ensuite, par contre, ça ne m'explique pas pourquoi lorsque qu'il n'a pas sa condition du if il ne continue pas sur le elseif
Bon, je regarde ce que tu me dis, et je tente un quelque chose dans la semaine
merci beaucoup
- blacksoul305
- Membre émérite
- Messages : 957
- Enregistré le : ven. 18 mars 2011 11:49
- Localisation : Au pays des programmeurs.
- Status : Hors ligne
Re: besoin d'aide, je tourne en rond... ça n'avance pas
Ça marche, bon courage !
Au fait, petite astuce quand tu bosses sur un programme qui est susceptible de rester/passer dans plusieurs états comme ton énorme bloc de If/Elseif/Endif, utilise des ToolTip. Par exemple juste en dessous de chaque condition, si elle est vérifiée, la première chose que tu mets c'est :
Du coup après tu peux afficher des contenus de variables bref, tout ce qui peut t'aider à comprendre pourquoi cette condition et pas une autre.
Au fait, petite astuce quand tu bosses sur un programme qui est susceptible de rester/passer dans plusieurs états comme ton énorme bloc de If/Elseif/Endif, utilise des ToolTip. Par exemple juste en dessous de chaque condition, si elle est vérifiée, la première chose que tu mets c'est :
ToolTip("Un message permettant te dire où ton programme est coincé",5, 0) ; <- fait apparaître coin supérieur gauche de l'écran le message
Du coup après tu peux afficher des contenus de variables bref, tout ce qui peut t'aider à comprendre pourquoi cette condition et pas une autre.
Étudiant en 2ème année de Licence Informatique.
Re: besoin d'aide, je tourne en rond... ça n'avance pas
Bonsoir, j'ai une nouvelle questionnette, c'est dire si elle est petite : on peut connaitre if winexists, mais comment peut on connaitre if msgboxexists? parce que je fais des essais, et je pense que c'est ça qui ne convient pas, avec un truc tout simple sur le bloc note, un truc à la mord moi le ...
Bref,
@ blacksoul305, j'ai commencé à regarder ce que tu me disais avec AutoIt Window Info tool ou encore Control Viewer, je suis rincé, je n'y comprend rien, mais je creuse, je creuse, je vais peut être finir par trouver du pétrole...
allez, je vais dormir, bonne nuit, et merci beaucoup pour votre aide
Bref,
@ blacksoul305, j'ai commencé à regarder ce que tu me disais avec AutoIt Window Info tool ou encore Control Viewer, je suis rincé, je n'y comprend rien, mais je creuse, je creuse, je vais peut être finir par trouver du pétrole...
allez, je vais dormir, bonne nuit, et merci beaucoup pour votre aide
- orax
- Modérateur
- Messages : 1479
- Enregistré le : lun. 23 mars 2009 04:50
- Localisation : ::1
- Status : Hors ligne
Re: besoin d'aide, je tourne en rond... ça n'avance pas
Avec le Bloc-notes, je fais Fichier > Enregistrer sous... Dans le nom du fichier, je mets un nom de fichier déjà existant. Je clique sur Enregistrer. Là, j'ai la Msgbox "Confirmer l’enregistrement" qui s'affiche.
Le titre de la Msgbox est "Confirmer l’enregistrement". D'ailleurs, si je ne dis pas de bêtises, une Msgbox est une fenêtre donc on peut également utiliser WinExists.
Le titre de la Msgbox est "Confirmer l’enregistrement". D'ailleurs, si je ne dis pas de bêtises, une Msgbox est une fenêtre donc on peut également utiliser WinExists.
Code : Tout sélectionner
If WinExists("Confirmer l’enregistrement") Then ConsoleWrite(":o)" & @CRLF)
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)
- blacksoul305
- Membre émérite
- Messages : 957
- Enregistré le : ven. 18 mars 2011 11:49
- Localisation : Au pays des programmeurs.
- Status : Hors ligne
Re: besoin d'aide, je tourne en rond... ça n'avance pas
Salut,
je vais reprendre l'exemple proposé par Orax et surtout te donner de quoi visualiser. Personnellement j'utilise Control Viewer (enfin, utilisais parce que je n'automatise plus grand chose), puisqu'il est assez complet et puis intuitif.
Je souhaite enregistrer mon fichier par dessus un autre et comme il a déjà été dit, une boite de dialogue va s'ouvrir en me demandant si oui ou non je veux l'enregistrer. Pour automatiser ça il me faut plusieurs choses :
Moi j'aime bien utiliser les handle, pour la simple est bonne raison qu'un handle est donné par Windows et qu'il est unique. Le titre quant à lui n'est pas unique ce qui rend les choses plus compliquées dans le cas d'automatisation de mêmes programmes en même temps. Les deux sont utilisables et viables dans cet exemple, ci-dessous une capture d'écran et un code, en espérant éclaircir un peu les choses.
Pour en revenir au problème principal, j'aimerais souligner le fait qu'une fenêtre pas affichée mais créée existe. Ainsi, peut-être que lorsque la seconde condition de ton programme est vérifiée, une boite de dialogue s'ouvre, mais la fenêtre principale "TS rapatriés" est seulement cachée. Cachée mais existante, donc ton programme reste dans le premier état. Ce n'est qu'une supposition, il faudrait tester en ajoutant dans ta condition secondaire si la fenêtre existe et si la boite de dialogue existe également.
Bon courage !
je vais reprendre l'exemple proposé par Orax et surtout te donner de quoi visualiser. Personnellement j'utilise Control Viewer (enfin, utilisais parce que je n'automatise plus grand chose), puisqu'il est assez complet et puis intuitif.
Je souhaite enregistrer mon fichier par dessus un autre et comme il a déjà été dit, une boite de dialogue va s'ouvrir en me demandant si oui ou non je veux l'enregistrer. Pour automatiser ça il me faut plusieurs choses :
- De quoi manipuler la fenêtre
- De quoi manipuler le bouton de mon choix.
Moi j'aime bien utiliser les handle, pour la simple est bonne raison qu'un handle est donné par Windows et qu'il est unique. Le titre quant à lui n'est pas unique ce qui rend les choses plus compliquées dans le cas d'automatisation de mêmes programmes en même temps. Les deux sont utilisables et viables dans cet exemple, ci-dessous une capture d'écran et un code, en espérant éclaircir un peu les choses.
Code : Tout sélectionner
Local $sWinTitle = "Confirmer l’enregistrement", $hdlDialog = HWnd("0x00180DC6")
Local $hdlYesButton = HWnd(0x00240D6E) ; handle du bouton pour le manipuler
If WinExists($sWinTitle) Then
MsgBox(64, "Infos", "Titre de la fenêtre : " & WinGetTitle($hdlDialog) & @CRLF & "Contenu du bouton : " & ControlGetText($hdlDialog, "", $hdlYesButton))
ControlClick($hdlDialog, "", $hdlYesButton)
EndIf
Bon courage !
Étudiant en 2ème année de Licence Informatique.
Re: besoin d'aide, je tourne en rond... ça n'avance pas
Oh là là là là...
je vais essayer tout ça, merci beaucoup à tous pour toutes ces explications,
je vais essayer tout ça, merci beaucoup à tous pour toutes ces explications,
Re: besoin d'aide, je tourne en rond... ça n'avance pas
et maintenant que j'ai testé, et que je ne comprends pas, et bien je vais passer pour un c...
Le handle ne change pas, pourtant, si j'ouvre une fenêtre, je récupère le handle, je la ferme, je la réouvre, ce qui ne sert à rien par ailleurs, mais mettons, ben le handle n'est plus le même, tu me dis pourtant qu'il est unique
ensuite, j'essaye de bidouiller ton truc, pour que mon machin il marche, j'ai fait tout comme tu m'as dit, promis, je sais, c'est moi, mais ça ne fonctionne pas, alors voilà un bout de code tout nul qui ne sert à rien :
ça ouvre le bloc note, ça écrit une connerie, et ça envoie une msgbox qui ne sert à rien, enfin, là elle ne sert à rien, c'est juste pour essayer de comprendre, et ben croyez moi, croyez moi pas, je n'arrive pas à la fermer! de manière automatique je parle, parce qu'avec ma main droite, et mon souriceau, je y'arrive très bien
c'est vraiment prenant, ce truc!!!
allez, merci à tous encore pour votre aide, surtout envers les boulets like me
Le handle ne change pas, pourtant, si j'ouvre une fenêtre, je récupère le handle, je la ferme, je la réouvre, ce qui ne sert à rien par ailleurs, mais mettons, ben le handle n'est plus le même, tu me dis pourtant qu'il est unique
ensuite, j'essaye de bidouiller ton truc, pour que mon machin il marche, j'ai fait tout comme tu m'as dit, promis, je sais, c'est moi, mais ça ne fonctionne pas, alors voilà un bout de code tout nul qui ne sert à rien :
Code : Tout sélectionner
Run("notepad.exe")
WinActivate("Sans titre - Bloc-notes")
WinWaitActive("Sans titre - Bloc-notes")
send("essai")
#include <MsgBoxConstants.au3>
Example()
Func Example()
; Retrieve the window title of the active window.
Local $sText = WinGetTitle("[ACTIVE]")
; Display the window title.
MsgBox($MB_SYSTEMMODAL, "", $sText)
EndFunc ;==>Example
c'est vraiment prenant, ce truc!!!
allez, merci à tous encore pour votre aide, surtout envers les boulets like me
- blacksoul305
- Membre émérite
- Messages : 957
- Enregistré le : ven. 18 mars 2011 11:49
- Localisation : Au pays des programmeurs.
- Status : Hors ligne
Re: besoin d'aide, je tourne en rond... ça n'avance pas
Re,
alors attention. Le Handle est unique ça je l'assure, mais je n'ai jamais dit qu'il était statique. Il est unique au sens où parmi TOUTES les fenêtres ouvertes dans ton ordinateur, Windows a associé à chacune un unique handle pour pouvoir les manipuler.
Quand tu veux travailler avec des fenêtres qui peuvent potentiellement avoir le même nom, ce que tu peux faire c'est les faire apparaître les unes après les autres, changer leur nom avec "WinSetTitle" ou bien récupérer leur handle avec WinGetHandle et les stocker. Si jamais les titres posent problèmes, tu peux essayer avec les classes.
Exemple : je veux travailler sur deux bloc-notes.
alors attention. Le Handle est unique ça je l'assure, mais je n'ai jamais dit qu'il était statique. Il est unique au sens où parmi TOUTES les fenêtres ouvertes dans ton ordinateur, Windows a associé à chacune un unique handle pour pouvoir les manipuler.
Quand tu veux travailler avec des fenêtres qui peuvent potentiellement avoir le même nom, ce que tu peux faire c'est les faire apparaître les unes après les autres, changer leur nom avec "WinSetTitle" ou bien récupérer leur handle avec WinGetHandle et les stocker. Si jamais les titres posent problèmes, tu peux essayer avec les classes.
Exemple : je veux travailler sur deux bloc-notes.
Code : Tout sélectionner
Local $hdlArray[2]
Run("notepad.exe")
WinWait("[CLASS:Notepad]")
$hdlArray[0] = WinGetHandle("[CLASS:Notepad]")
WinSetTitle($hdlArray[0], "", "b1")
Run("notepad.exe")
WinWait("[CLASS:Notepad]")
$hdlArray[1] = WinGetHandle("[CLASS:Notepad]")
WinSetTitle($hdlArray[1], "", "b2")
WinClose("b2")
MsgBox(0,"","b2 fermé")
WinClose("b1")
MsgBox(0,"","b1 fermé")
Étudiant en 2ème année de Licence Informatique.
Re: besoin d'aide, je tourne en rond... ça n'avance pas
allez, c'est parti, j'essaye, après tout, je ne suis pas plus mauvais qu'un autre, mais puisqu'il en est ainsi, puis je me permettre une nouvelle question? parce que j'ai du mal à saisir l'histoire des classes, et pourtant, c'est pas faute d'avoir essayé, mais je ne m'en sors pas, et les explications sont parfois un peu sommaires à mon goût, ou c'est parfois moi qui ai des difficultés à comprendre, va savoir!!!
- mikell
- Spammer !
- Messages : 6292
- Enregistré le : dim. 29 mai 2011 17:32
- Localisation : Deep Cévennes
- Status : Hors ligne
Re: besoin d'aide, je tourne en rond... ça n'avance pas
Heu si je puis me permettre, prendre comme exemple une Msgbox est un très mauvais plança envoie une msgbox (...), et ben croyez moi, croyez moi pas, je n'arrive pas à la fermer! de manière automatique je parle
En effet la particularité d'une Msgbox c'est qu'elle est bloquante, autrement dit le script se met en pause tant que la bête n'a pas été manuellement fermée
Démonstration, le post #10 d'orax :
Code : Tout sélectionner
Msgbox(0, "Confirmer l’enregistrement", "texte")
If WinExists("Confirmer l’enregistrement") Then ConsoleWrite(":o)" & @CRLF)
" 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 )
- blacksoul305
- Membre émérite
- Messages : 957
- Enregistré le : ven. 18 mars 2011 11:49
- Localisation : Au pays des programmeurs.
- Status : Hors ligne
Re: besoin d'aide, je tourne en rond... ça n'avance pas
Regarde ce lien si tu veux des infos par rapport aux classes de fenêtres. Pour ton problème, il suffit juste de les trouver (Control Viewer) et de les utiliser (mon code).
Je pense qu'il essayait de la fermer via un autre script. 'fin j'imagine étant donné que je ne vois aucun ControlClick dans le code contenant la MsgBox. L'idée devait être de créer un script popant une MsgBox dont le nom serait exactement celui du bloc-notes pour s'entraîner à différencier les deux fenêtres aux mêmes titres et de fermer la bonne. Je suppose du moins !
Je pense qu'il essayait de la fermer via un autre script. 'fin j'imagine étant donné que je ne vois aucun ControlClick dans le code contenant la MsgBox. L'idée devait être de créer un script popant une MsgBox dont le nom serait exactement celui du bloc-notes pour s'entraîner à différencier les deux fenêtres aux mêmes titres et de fermer la bonne. Je suppose du moins !
Étudiant en 2ème année de Licence Informatique.
Re: besoin d'aide, je tourne en rond... ça n'avance pas
'soir!!
je continue à essayer de comprendre entre toutes les infos que vous me donnez, et les liens, j'étudie tout ça, merci
ça, j'en convient, mais ça ne doit pas être impossible quand même, et c'est bien là que mon script de départ m...douille, enfin, c'est ce que je pensais, donc, je me suis dit que j'allais me construire un exemple débile sur le bloc note, et voir ce que ça donnait, ben je n'y arrive pas, je ne pensais pas bloquer sur un truc aussi simple, c'est là que la réalité me rattrape : je suis débutantHeu si je puis me permettre, prendre comme exemple une Msgbox est un très mauvais plan
En effet la particularité d'une Msgbox c'est qu'elle est bloquante, autrement dit le script se met en pause tant que la bête n'a pas été manuellement fermée
je continue à essayer de comprendre entre toutes les infos que vous me donnez, et les liens, j'étudie tout ça, merci
- mikell
- Spammer !
- Messages : 6292
- Enregistré le : dim. 29 mai 2011 17:32
- Localisation : Deep Cévennes
- Status : Hors ligne
Re: besoin d'aide, je tourne en rond... ça n'avance pas
Dans ton message #13 tu pensais automatiser la fermeture d'une Msgbox créée par le même script : ça c'est pas possible
Mais comme l'explique orax tu peux très bien fermer une msgbox créée par notepad (ou autre, ou un 2ème script) en utilisant le titre de cette msgbox ou son handle - comme n'importe quelle autre fenêtre
Mais comme l'explique orax tu peux très bien fermer une msgbox créée par notepad (ou autre, ou un 2ème script) en utilisant le titre de cette msgbox ou son handle - comme n'importe quelle autre fenêtre
" 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 )
Re: besoin d'aide, je tourne en rond... ça n'avance pas
bon, je commence à comprendre, doucement, mais sûrement, il y a un sacré coup de main à prendre pour comprendre la logique du truc, mais je commence à me dépatouiller, par contre, certaines commandes restent encore floues pour moi, je n'ai pas encore regardé le lien concernant la class, mais vu l'heure, je regarderai demain, ceci étant, je vais poser ma question :
dans mon bout de script débile qui ne sert absolument à rien :
j'utilise la fonction "send" pour aller dans le menu "fichier", puis "enregistrer sous" : send("!fr"), y'a-t-il une solution moins "carton" comme dirait blacksoul305!! J'avoue bien aimer le coup du code carton
je suis sur que la solution est en vous jeunes send("pada one")
Bonne soirée
dans mon bout de script débile qui ne sert absolument à rien :
Code : Tout sélectionner
Run("notepad.exe")
WinActivate("Sans titre - Bloc-notes")
WinWaitActive("Sans titre - Bloc-notes")
Dim $DateActuel = @MDAY & "-" & @MON & "-" & @YEAR
Dim $HeureActuelle = @HOUR & ":" & @MIN & ":" & @SEC
send("le " & $DateActuel & " à " & $HeureActuelle & @CRLF)
sleep(1000)
send("!fr")
WinWaitActive("Enregistrer sous")
Sleep(500)
ControlCommand("Enregistrer sous", "", "1001", send("essai"))
ControlClick("Enregistrer sous","", "[CLASS:Button; INSTANCE:2]")
sleep(500)
WinWaitActive("Confirmer l’enregistrement")
je suis sur que la solution est en vous jeunes send("pada one")
Bonne soirée