Page 1 sur 1
[R] Passage en domaine AutoIT - Windows 7
Posté : ven. 26 août 2011 13:47
par Loulou63
Bonjour a tous,
Décidement je n'arrete pas de vous demander des choses

.
Je suis actuellement en train de mettre en place un script AutoIT pour le passage en domaine pour un poste sur Windows 7.
Tout ce passe bien jusqu'à la fenetre "Nom d’utilisateur et mot de passe pour le domaine".
Voici le code correspondant à cette partie :
► Afficher le texte
Code : Tout sélectionner
Sleep($Temporisation)
While Not WinActive("Nom d’utilisateur et mot de passe pour le domaine","Entrez le nom et le mot de passe d’un compte autorisé")
Sleep($Temporisation * 2)
WinActivate("Nom d'utilisateur et mot de passe pour le domaine","Entrez le nom et le mot de passe d’un compte autorisé")
WEnd
ControlSetText("Nom d'utilisateur et mot de passe pour le domaine", "Entrez le nom et le mot de passe d’un compte autorisé", "[CLASS:Edit; INSTANCE:1]", "USER")
ControlSetText("Nom d'utilisateur et mot de passe pour le domaine", "Entrez le nom et le mot de passe d’un compte autorisé", "[CLASS:Edit; INSTANCE:2]", "PASSWD")
ControlSetText("Nom d'utilisateur et mot de passe pour le domaine", "Entrez le nom et le mot de passe d’un compte autorisé", "[CLASS:Edit; INSTANCE:3]", "DOMAINE")
ControlClick("Nom d'utilisateur et mot de passe pour le domaine", "Entrez le nom et le mot de passe d’un compte autorisé.", "[CLASS:Button; TEXT:OK]")
Sleep($Temporisation)
While WinExists("Nom d'utilisateur et mot de passe pour le domaine", "Entrez le nom et le mot de passe d'un compte autorisé")
Sleep($Temporisation * 2)
WEnd
Et la rien ne se passe, la saisie ne se fait pas et il poursuit le script qui bien sûr plante.
Avez-vous une idée.
Merci d'avance.
Re: [..] Passage en domaine AutoIT - Windows 7
Posté : ven. 26 août 2011 15:05
par mikell
Le code a l'air bon... peut-être en optimisant, ce qui évite les erreurs de saisie
► Afficher le texte
Code : Tout sélectionner
$title = "Nom d’utilisateur et mot de passe pour le domaine"
Sleep($Temporisation)
While Not WinActive($title)
Sleep($Temporisation * 2)
WinActivate($title)
WEnd
ControlSetText($title, "", "[CLASS:Edit; INSTANCE:1]", "USER")
ControlSetText($title, "", "[CLASS:Edit; INSTANCE:2]", "PASSWD")
ControlSetText($title, "", "[CLASS:Edit; INSTANCE:3]", "DOMAINE")
Sleep(100)
ControlClick($title, "", "[CLASS:Button; TEXT:OK]")
While WinExists($title)
Sleep($Temporisation * 2)
WEnd
Re: [..] Passage en domaine AutoIT - Windows 7
Posté : ven. 26 août 2011 15:22
par Loulou63
mikell a écrit :Le code a l'air bon... peut-être en optimisant, ce qui évite les erreurs de saisie
► Afficher le texte
Code : Tout sélectionner
$title = "Nom d’utilisateur et mot de passe pour le domaine"
Sleep($Temporisation)
While Not WinActive($title)
Sleep($Temporisation * 2)
WinActivate($title)
WEnd
ControlSetText($title, "", "[CLASS:Edit; INSTANCE:1]", "USER")
ControlSetText($title, "", "[CLASS:Edit; INSTANCE:2]", "PASSWD")
ControlSetText($title, "", "[CLASS:Edit; INSTANCE:3]", "DOMAINE")
Sleep(100)
ControlClick($title, "", "[CLASS:Button; TEXT:OK]")
While WinExists($title)
Sleep($Temporisation * 2)
WEnd
Ca ne marche pas. Seul la commande
send marche. Mais cela ralentit mon script

Re: [..] Passage en domaine AutoIT - Windows 7
Posté : ven. 26 août 2011 15:37
par PandiPanda
Et pourquoi ne pas envoyer un copier/coller?
Code : Tout sélectionner
$text="le text a copier"; le texte a inserer
$presse=ClipGet();on enregistre ce qu'il y'a dans le presse papier
ClipPut($text);on insere ce qu'on veux dans le presse papier
Send("^v");on colle
ClipPut($presse);on insere ce qu'on avait enregistrer
Sinon, vous êtes sûr que vos "controlID" sont bon?
Re: [..] Passage en domaine AutoIT - Windows 7
Posté : ven. 26 août 2011 17:58
par legend
controlsettext ne marche pas sur tout les controls mais seulement sur des API reconnus du genre input/edit.
normalement ça devrait marcher puisque tes controls sont de type edit.
j'approuve l'idée de pandi panda mais j'ajoute un truc :
il n'est pas nécessaire d'activer la fenêtre pour utiliser les commandes control . . . .
il est donc possible d'utiliser controlsend pour coller le texte dans les controls.
essaye d'utiliser controlgettext pour verifier si il n'y a pas eu de bugs (mais normalement ça fonctionnera pas puisque controlsettext n'a pas marché)
Re: [R] Passage en domaine AutoIT - Windows 7
Posté : ven. 26 août 2011 19:37
par Loulou63
legend a écrit :controlsettext ne marche pas sur tout les controls mais seulement sur des API reconnus du genre input/edit.
normalement ça devrait marcher puisque tes controls sont de type edit.
j'approuve l'idée de pandi panda mais j'ajoute un truc :
il n'est pas nécessaire d'activer la fenêtre pour utiliser les commandes control . . . .
il est donc possible d'utiliser controlsend pour coller le texte dans les controls.
essaye d'utiliser controlgettext pour verifier si il n'y a pas eu de bugs (mais normalement ça fonctionnera pas puisque controlsettext n'a pas marché)
Je vais rester sur la fonction send. C'est grave. Ca fonctionne c'est le principal. Merci à tous.
Mon code :
► Afficher le texte
Code : Tout sélectionner
Send("USER")
Send("{TAB}")
Send("PASS")
Send("{TAB}")
Send("DOMAINE.LOCAL")
Send("{TAB}")
Send("{ENTER}")
Re: [..] Passage en domaine AutoIT - Windows 7
Posté : ven. 26 août 2011 19:58
par PandiPanda
si vous utilisé les send()
veuillez utilisé au moin les "copier/coller" pour la rapidité ... c'est toujours mieux que rien
► Afficher le texte
Code : Tout sélectionner
ClipPut("USER")
Send("^v")
Send("{TAB}")
ClipPut("PASS")
Send("^v")
Send("{TAB}")
ClipPut("DOMAINE.LOCAL")
Send("^v")
Send("{TAB}")
Send("{ENTER}")
ou
► Afficher le texte
Code : Tout sélectionner
_SendColle("USER")
Send("{TAB}")
_SendColle("PASS")
Send("{TAB}")
_SendColle("DOMAINE.LOCAL")
Send("{TAB}")
Send("{ENTER}")
Func _SendColle($txt)
$var=ClipGet()
ClipPut($txt)
Send("^v")
ClipPut($var)
EndFunc
Re: [R] Passage en domaine AutoIT - Windows 7
Posté : ven. 26 août 2011 22:48
par Loulou63
PandiPanda a écrit :si vous utilisé les send()
veuillez utilisé au moin les "copier/coller" pour la rapidité ... c'est toujours mieux que rien
► Afficher le texte
Code : Tout sélectionner
ClipPut("USER")
Send("^v")
Send("{TAB}")
ClipPut("PASS")
Send("^v")
Send("{TAB}")
ClipPut("DOMAINE.LOCAL")
Send("^v")
Send("{TAB}")
Send("{ENTER}")
ou
► Afficher le texte
Code : Tout sélectionner
_SendColle("USER")
Send("{TAB}")
_SendColle("PASS")
Send("{TAB}")
_SendColle("DOMAINE.LOCAL")
Send("{TAB}")
Send("{ENTER}")
Func _SendColle($txt)
$var=ClipGet()
ClipPut($txt)
Send("^v")
ClipPut($var)
EndFunc
Je vais tester ca.Merci bcp