Page 1 sur 1
[..] Sélection dans un menu déroullant.
Posté : mer. 23 oct. 2013 12:51
par gege
Bonjour,
Après plusieurs recherche et plusieurs essai, je n'arrive pas a sélectionner le nom d'une imprimante dans un menu déroulant. Pour pouvoir finir mon programme d'automatisation d’installation d'imprimante sur plusieurs PC.
Je suis débutant dans se domaine. Pourriez-vous m'écrire les quelques lignes manquante de code précis pour sélectionner l'imprimante (Canon LBP6680/3480 PCL5e) désiré dans le menu déroulant.
Merci d'avance pour votre aide.
image de la fenêtre avec le menu déroulant
[img]
[img]http://img.imagesia.com/fichiers/cp/imprimante_imagesia-com_cpi2_large.PNG[/img][/img]
Merci d'avance pour votre aide.
► Afficher le texte
Code : Tout sélectionner
Global $titre="Pilote d'imprimante PCL - Assistant Installation version 20.70"
; Lance le programme d'installation
ShellExecute("Setup.exe")
; Le programme attend que la fenêtre d'installation soit active
WinWaitActive( $titre, "Cet assistant va installer le pilote d'imprimante PCL sur l'ordinateur.")
ControlClick($titre,"","&Suivant >")
WinWaitActive($titre, "Acceptez-vous les termes du contrat de licence ?")
ControlClick($titre,"","&Oui")
;ControlClick ("Choose Install Location", "", "Button2", "")
WinWaitActive($titre, "Définir manuellement un port pour l'installation")
ControlClick($titre,"","&Suivant >")
WinWaitActive($titre, "Sélectionner une fonction")
ControlClick($titre,"","&Suivant >")
WinWaitActive($titre, "Sélectionner les imprimantes à installe")
[b];c'est ici qu'il me manque la commande pour sélectionner l'imprimante merci pour votre aide[/b]
WinWaitActive($titre, "Informations sur l'imprimante")
Send ("{TAB 1}")
Send ("{SPACE}")
WinWaitActive("Ajouter un port", "Sélectionnez le port à ajouter, puis cliquez sur [OK].")
Send ("{DOWN}");= Flaiche desendre
Send ("{DOWN}");= Flaiche desendre
Send ("{ENTER}")
WinWaitActive("Assistant Ajout de port imprimante TCP/IP standard" , "Cliquez sur Suivant pour continuer.")
ControlClick("Assistant Ajout de port imprimante TCP/IP standard","","&Suivant >")
Send ("192.168.1.129")
WinWaitActive("Assistant Ajout de port imprimante TCP/IP standard" , "Nom ou a&dresse IP de l’imprimante :")
ControlClick("Assistant Ajout de port imprimante TCP/IP standard","","&Suivant >")
WinWaitActive("Assistant Ajout de port imprimante TCP/IP standard" , "Fin de l'Assistant Ajout de port imprimante TCP/IP standard")
ControlClick("Assistant Ajout de port imprimante TCP/IP standard","","Terminer")
WinWaitActive($titre, "Informations sur l'imprimante")
Send ("{TAB 2}")
Send ("{SPACE}")
Send ("{TAB 3}")
Send ("{ENTER}")
WinWaitActive("Pilote d'imprimante PCL - Assistant Installation version 20.70", "Le programme d'installation va installer le(s) pilote(s) avec les paramètres suivants.")
ControlClick("Pilote d'imprimante PCL - Assistant Installation version 20.70","","&Démarrer")
WinWaitActive("Avertissement", "Il est impossible d'arrêter l'installation une fois qu'elle a commencé.Souhaitez-vous continuer ?")
Send ("{ENTER}")
Re: [..] Sélection dans un menu déroullant.
Posté : mer. 23 oct. 2013 23:06
par jguinch
Regarde la fonction ControlListView() dans la doc, avec "FindItem" puis "Select", tu devrais pouvoir t'en sortir.
Code : Tout sélectionner
$sRef = "HP LaserJet 4000"
$index = ControlListView( "Ajouter une imprimante", "", "[CLASS:SysListView32; INSTANCE:1]", "FindItem", $sRef)
ControlListView( "Ajouter une imprimante", "", "[CLASS:SysListView32; INSTANCE:1]", "Select", $index)
Sinon, pour la gestion des imprimantes, tu peux regarder
cet UDF
Re: [..] Sélection dans un menu déroullant.
Posté : mer. 23 oct. 2013 23:11
par Tlem
Bonsoir.
Essayez de mettre le focus dans la vue en liste puis envoyez la séquence de touches correspondantes :
Re: [..] Sélection dans un menu déroullant.
Posté : jeu. 24 oct. 2013 14:46
par gege
Bonjour,
Merci pour vos réponses,
En ce qui concerne la réponse de Tlem, j'avais déjà essayer cette possibilité que j'ai renouveler pour avoir une confirmation qu'elle ne fonctionne pas.
jguinch; j'ai regarder la documentation sur les deux fonctions ControlListView() "FindItem", je n'ai pas compris tes lignes de code et ces fonctions. Pourrais tu être un peu plus claire dans ta démarche que je puisse faire l'essai.
Quand la fenêtre du menu déroulant apparait, la première imprimante de la liste et déjà sélectionner en bleu.
j'ai fais l'essai avec la commande "send ("{DOWN 32}")" pour faire descendre ma sélection. Elle change bien de position mais de façon aléatoire donc je ne suis jamais sur la même sélection.
Merci de soutenir mon projet.

Re: [..] Sélection dans un menu déroullant.
Posté : jeu. 24 oct. 2013 21:22
par Tlem
Vous est-il possible de donner un lien de téléchargement de votre installateur pour qu'on puisse voir ça de près ?
Re: [..] Sélection dans un menu déroullant.
Posté : ven. 25 oct. 2013 07:20
par gege
Bonjour,
(système d'exploitation OS des PC Win7)
Le lien de téléchargement du driver de l'imprimante Canon LBP6680/3480 PCL5e et
http://www.canon.fr/Support/Consumer_Pr ... oad&page=1
J'ai fais des essais avec la commande MouseClickDrag("left", 1110, 459, 1110, 500,100) sa ne fonctionne pas avec le système d'installation Canon (la souris se déplace correctement mais ne sélectionne pas la barre latérale coulissante du fichier d'installation).
Merci de vous occupez de mon soucis.
Re: [..] Sélection dans un menu déroullant.
Posté : ven. 25 oct. 2013 09:30
par Tlem
Bonjour.
Je n'avais pas de Windows 7 sous la main, donc j'ai testé sous XP.
Visiblement le texte de la liste n'est pas facilement accessible en lecture pour AutoIt. Mais comme vous avez une version déterminée du pilote, vous savez à quelle position ce trouve le pilote dont vous avez besoin.
Donc voici un code de sélection du pilote que j'ai testé et qui fonctionne sur XP :
Code : Tout sélectionner
; Sélection de la ligne 35 : LBP6680/3480
For $i = 1 To 35
ControlSend("[CLASS:#32770]", "Liste des imprimantes", "[CLASS:ListBox; INSTANCE:1]","{DOWN}")
Sleep(100)
Next
ControlClick("[CLASS:#32770]", "Liste des imprimantes", "[CLASSNN:Button1]", "left")
Re: [..] Sélection dans un menu déroullant.
Posté : ven. 25 oct. 2013 10:24
par jguinch
Mon code précédent n'aurait pas pu fonctionné, vu que la liste est une Listbox et non une Listview.
L'UDF GuiListBox.au3 (intégré à AutoIt), permettra de manipuler ce type de contrôle.
J'ai téléchargé le programme d'installation, ça à l'air de fonctionner avec ça :
► Afficher le texte
Code : Tout sélectionner
#include <GuiListBox.au3>
; Récupère la handle de la fenêtre
Local $hWindow = WinGetHandle("Pilote d'imprimante PCL - Assistant Installation version 20.70")
; Liste des pilotes à installer
Local $aDriver[2] = [ "Canon iR-ADV 8000s-U1 PCL5e", "Canon iR-ADV 8105 PCL5e" ]
; Récupére le handle de la liste
Local $hListbox = ControlGetHandle($hWindow, "", "[CLASS:ListBox; INSTANCE:1]" )
; Récupère le nombre d'éléments
$iCnt = _GUICtrlListBox_GetCount($hListbox)
; Désélectionne tout
_GUICtrlListBox_SelItemRange ($hListbox, 0, $iCnt - 1, False)
; On parcours la liste
For $i = 0 To $iCnt - 1
; On récupère de texte de chaque ligne
$sText = _GUICtrlListBox_GetText($hListbox, $i)
; On regarde dans le tableau $aDriver si ça match
For $j = 0 To UBound($aDriver) - 1
; Si ça match, on sélectionne
If $sText = $aDriver[$j] Then _GUICtrlListBox_SetSel ( $hListbox, $i )
Next
Next
ControlClick($hWindow, "", "[CLASS:Button; INSTANCE:1]")
Re: [R] Sélection dans un menu déroullant.
Posté : lun. 28 oct. 2013 17:31
par gege
bonjour,
Tlem
jguinch
j'ai incorporé l'une après l'autre, vos quelques lignes de code sous windows 7 dans mon programme et les deux fonctionnent très bien. Je vous en remercie. Je ne les aurais jamais trouvé tout seul, c'était trop compliqué pour moi.
celle de Tlem est encore facilement compréhensible
celle de jguinch je ne l'ai pas comprise
encore merci à vous 2
Re: [..] Sélection dans un menu déroullant.
Posté : lun. 28 oct. 2013 21:03
par Tlem
Bonsoir.
Vous dites ne pas comprendre le code de jguinch, mais pourtant il a mit suffisamment de commentaires pour détailler chaque action importante. ^^
Refaite une lecture plus posée et regardez la documentation des fonctions, car sa méthode à le mérite de ne pas se baser sur la Xième ligne qui est supposée être tel pilote, mais bel et bien par rapport au nom de la machine. Son code est certes plus compliqué, mais bien mieux abouti et pérenne.