[..] ComboBox récalcitrante

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Clampu
Niveau 3
Niveau 3
Messages : 48
Enregistré le : mer. 16 mai 2012 22:08
Status : Hors ligne

[..] ComboBox récalcitrante

#1

Message par Clampu »

Bonjour à toutes et à tous

Je suis confronté à une combo quelques peu récalcitrante à alimenter, sur un progiciel (AI : ACTIV'Infinite). Je souhaite l'alimenter avec le contenue d'une variable. J'ai essayé différentes manières :

Celle ci ne fonctionne pas : c'est logique puisqu'on envoie les lettre 1 par 1. C'est donc la dernière lettre de $col[4] qui fait foi :

Code : Tout sélectionner

ControlSend($fenetre_creation, "", "[CLASSNN:TWINDOW115]", $col[4]); Si on a AB et BA comme choix, que $col[4] = AB, on écrit BA ce qui n'est pas bon
 
Le ControlGetText renvoie vide, il n'arrive pas à lire la donnée dans AI :

Code : Tout sélectionner

    
; Code trouvé sur l'ancien forum AutoIt http://autoit-fr.realbb.net/t165-choisir-dans-une-liste-deroulante
While ControlGetText($fenetre_creation, "","[CLASSNN:TWINDOW115]") <> $col[4]
    ControlSend ($fenetre_creation, "", "[CLASSNN:TWINDOW115]", "{DOWN}" )
WEnd
; Même chose avec un ControlCommand($fenetre_creation, "", "[CLASSNN:TWINDOW115]", "GetCurrentSelection")
 ou un ControlCommand($fenetre_creation, "", "[CLASSNN:TWINDOW115]", "GetSelected")
J'ai même essayé de copier après un ControlFocus (pour lire dans le presspapier jusqu'à ce qu'on ai la bonne valeur), mais le copier coller fonctionne pas pour la combo :x

Devrai fonctionner, mais non :cry: :

Code : Tout sélectionner

; Je cherche une solution de ce type, assez 'puissante' pour prendre directement en compte les différents changements possible en entrée (tant que la valeur existe dans le combo d'AI bien sur)
ControlCommand($fenetre_creation, "", "[CLASSNN:TWINDOW115]", "SelectString", $col[4])
 


Le seul code qui fonctionne :

Code : Tout sélectionner

ControlFocus($fenetre_creation, "", "[CLASSNN:TWINDOW115]")
Switch $col[4]
   Case "CHEQUE"
      Send("{DOWN 1}")
   Case "COMPENS_TPTV"
      Send("{DOWN 2}")
...
EndSwitch
 
Mais ce n'est pas satisfaisant dans la mesure ou l'ordre dans AI est amené à charger et des valeurs à s'ajouter. Il me faudrait une solution non exhaustive, pour prendre en compte automatiquement les modifications dans la source $col[4] (ne pas avoir à rajouter un Case par exemple)

Des pistes ? Je continue de chercher autour de ControlXXX (en particulier ControlCommand) de mon côté.
Merci pour toute l'aide que ce forum m'a déjà apporté, et merci aux futurs collaborateurs de ce topic

PS : dans AWI, je n'ai pas de Name, pas d'ID ou de Texte (même si la donnée est alimentée). Pour tous les éléments des IHM, j'ai un TWINDOW (que ce soit un label, un compo, un bouton ...)
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2515
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

Re: [..] ComboBox récalcitrante

#2

Message par jguinch »

Attention, certains fonctions comme ControlCommand, ControlGetText ... ne fonctionnent pas si le script s'exécute en 32 bits et que l'application tourne en 64 bits (et vis-versa).
Sinon, il y a les fonctions _GUICtrlComboBox... (voir dans la doc), qui permettront peut-être de faire mieux (idem pour 32/64 bits).
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
Clampu
Niveau 3
Niveau 3
Messages : 48
Enregistré le : mer. 16 mai 2012 22:08
Status : Hors ligne

Re: [..] ComboBox récalcitrante

#3

Message par Clampu »

Merci.

Je suis sous XP 32 bits, tout comme le logiciel AI.
Pour les _GUICtrlComboBox, je croyais que ce n'était que pour les contrôles gérés par le script, je me trompe ? J'ai toutefois essayé de récupérer les valeurs avec le handle (que j'ai bien via ControlGetHandle) avec _GUICtrlComboBox_GetList mais ça ne fonctionne pas. Par exemple, le _GUICtrlComboBox_GetCount me renvoie 0, ce qui me semble logique puisque la combo est sur une autre application (AI).

Je n'ai pas l'impression que ce soit des combos habituelles puisque je ne peux pas récupérer leur valeur avec un simple copier coller, ce qui est possible avec les combo créées par autoit.
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2515
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

Re: [..] ComboBox récalcitrante

#4

Message par jguinch »

Certaines fonctions, comme _GUICtrlListView... fonctionnent avec des fenêtres externes.
Pour _GUICtrlComboBox, je n'ai pas essayé.
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
Clampu
Niveau 3
Niveau 3
Messages : 48
Enregistré le : mer. 16 mai 2012 22:08
Status : Hors ligne

Re: [..] ComboBox récalcitrante

#5

Message par Clampu »

D'accord, je ne savais pas. Ce n'est pas une list view, ça ne fonctionne logiquement pas. J'ai quand même testé au cas ou (plus d'idées)
_GUICtrlListView_GetItemText
_GUICtrlListView_GetSelectionMark
_GUICtrlListView_GetItemCount
J’obtiens du '' ou du 0

J'imagine que le _GUICtrlComboBox fonctionne de la même manière, mais ce combo d'AI semble ne pas être standard. Je cherche une manière détournée mais :|
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2515
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

Re: [..] ComboBox récalcitrante

#6

Message par jguinch »

Peut-être du côté de l'UDF UIAutomation
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
Avatar du membre
orax
Modérateur
Modérateur
Messages : 1479
Enregistré le : lun. 23 mars 2009 04:50
Localisation : ::1
Status : Hors ligne

Re: [..] ComboBox récalcitrante

#7

Message par orax »

Clampu a écrit :PS : dans AWI, je n'ai pas de Name, pas d'ID ou de Texte (même si la donnée est alimentée). Pour tous les éléments des IHM, j'ai un TWINDOW (que ce soit un label, un compo, un bouton ...)
Dans le menu "Option", essaye avec "Use Spy++ control detection logic" décoché ou coché. Dans certains logiciels il faut que cette option soit décochée. http://www.autoitscript.com/forum/topic ... ntry897181
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)
Clampu
Niveau 3
Niveau 3
Messages : 48
Enregistré le : mer. 16 mai 2012 22:08
Status : Hors ligne

Re: [..] ComboBox récalcitrante

#8

Message par Clampu »

jguinch a écrit :Peut-être du côté de l'UDF UIAutomation
Hum je n'ai pas testé, mais à vue d’œil ça ne colle pas trop
orax a écrit :
Clampu a écrit :PS : dans AWI, je n'ai pas de Name, pas d'ID ou de Texte (même si la donnée est alimentée). Pour tous les éléments des IHM, j'ai un TWINDOW (que ce soit un label, un compo, un bouton ...)
Dans le menu "Option", essaye avec "Use Spy++ control detection logic" décoché ou coché. Dans certains logiciels il faut que cette option soit décochée. http://www.autoitscript.com/forum/topic ... ntry897181
Non :( dommage.

Je pense partir vers une autre solution, plus complexe mais qui devrait fonctionner :
Pour détailler un peu, la donnée que je veux entrer dans la combo est actuellement issue d'un fichier excel, à partir d'une liste de choix possibles (fixe, faite pour coller au progiciel).
Je vais rendre dynamique cette liste en l’extrayant du progiciel AI. Elle sera donc utilisée en entrée de mon alimentation de la combo. De plus (et c'est là que ça règle mon problème), je pourrai utiliser cette liste (éléments dans le même ordre que sur le progiciel) pour savoir ou se situe ma donnée dans ma combo : si c'est le 3eme élément de mon extraction, je fait un ControlSend(..., "{DOWN 3}"). Je ne pouvais pas utiliser cette manière auparavant car les données en entrées étaient issues de liste fixes. La moindre modification dans AI devait être reportée à la main dans la liste des choix possibles.

Trouver une manière simple d'envoyer le bon code m'aiderait encore, mais je peux m'en sortir avec les Send DOWN tout en étant sur que les données collent bien (car extrait dynamiquement). Si toutefois vous avez d'autres idées, je suis preneur.
Répondre