Page 1 sur 1
[R] Récuperer item selectionner dans une Listview.
Posté : ven. 27 juil. 2012 00:15
par LqX
Bonsoir,
Voila je bloque a cause d'une Listview qui contient une centaine de ligne et j'aimerai recuperer l'item selectionner.
J'ai essayer par
$selec = ControlListView("title", "texte", $hwd, "GetSelected"
$item = ControlListView("title", "texte ", $hwd, "GetText", $selec)
Mais sa me retourne toujours 0.
Re: [..] Récuperer item selectionner dans une Listview.
Posté : ven. 27 juil. 2012 00:27
par mikell
C'est correct, s'il n'y a pas d'erreur dans les ids ça doit marcher
Code : Tout sélectionner
$index = ControlListView($gui, "", $listview, "GetSelected")
$texte = ControlListView($gui, "", $listview, "GetText", $index)
Re: [..] Récuperer item selectionner dans une Listview.
Posté : ven. 27 juil. 2012 00:33
par LqX
sa me retourne toujours 0, j'ai essayer aussi l'exemple de l'help :
Code : Tout sélectionner
ControlListView(@ProgramFilesDir & "\AutoIt3", "", "SysListView321", "SelectAll")
ControlListView(@ProgramFilesDir & "\AutoIt3", "", "SysListView321", "Deselect", 2, 5)
MsgBox(0, "", ControlListView(@ProgramFilesDir & "\AutoIt3", "", "SysListView321", "GetText", 9, 0))
MsgBox(0, "", ControlListView(@ProgramFilesDir & "\AutoIt3", "", "SysListView321", "FindItem", "14 KB", 1))
MsgBox(0, "", ControlListView(@ProgramFilesDir & "\AutoIt3", "", "SysListView321", "GetSelected", 1))
Et j'ai toujours 0 aussi.
Re: [..] Récuperer item selectionner dans une Listview.
Posté : ven. 27 juil. 2012 03:43
par TopXm
Hello
Comme indiqué par Mikell normalement ton bout de code est bon, par contre rapport à l'exemple donné dans l'aide AutoIT, il ne faut pas perdre de vue plusieurs choses :
- Pour que l'exemple fonctionne on est bien d'accord que tu as, au préalable, ouvert l'explorer Windows sur le dossier
- De plus il semblerait que selon les version de Windows le titre de la fenêtre ne soit pas le même. Dans mon cas (je suis sous Seven), pour que l'exemple fonctionne, j'ai du remplacer :
par
- Pour s'en convaincre tu passes un coup de d'AU3info sur la fenêtre de l'explorer, ce qui donne ces informations
- AutoIT ayant évolué depuis la réalisation de l'exemple, il n'existe plus de fichier qui pèse 14 KB, si tu veux que ça fonctionne, il te faut donc adapter le poids d'un fichier du dossier comme par exemple 665 Ko. Ce ne sont pas des KB en French mais des Ko (sans UpperCut).
- En plus la colonne des tailles des fichiers n'est plus au même endroit, il faut donc l'ajuster.
Avec l'explorer comme ceci par exemple (en vue détail)
Cela donne un bout de code qui ressemble à ceci :
► Afficher le texteExemple
Code : Tout sélectionner
Local $hWnd = WinGetHandle("AutoIt3")
Local $hWndLstV = ControlGetHandle($hWnd, "", "[CLASS:SysListView32;INSTANCE:1]")
;=> Renvoie le texte du 9eme item donc Scite
MsgBox(0, "", ControlListView($hWnd, "", $hWndLstV, "GetText", 9, 0))
;=> Renvoie l'index de l'item qui contient le nom de dossier Include en colonne 0 [ça fonctionne]
MsgBox(0, "", ControlListView($hWnd, "", $hWndLstV, "FindItem", "Include", 0))
;=> Renvoie l'index de l'item qui contient la taille à 665 Ko en colonne 3
MsgBox(0, "", ControlListView($hWnd, "", $hWndLstV, "FindItem", "665 Ko", 3))
; On peut aussi pour faire une recherche sur une partie du champs utiliser une function
MsgBox(0, "", _FindItem('665 Ko', 3))
;=> Renvoie une chaine contenant les index des différents items sélectionnés soit :
; 0|1|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26
ControlListView($hWnd, "", $hWndLstV, "SelectAll")
ControlListView($hWnd, "", $hWndLstV, "Deselect", 2, 5)
MsgBox(0, "", ControlListView($hWnd, "", $hWndLstV, "GetSelected", 1))
Func _FindItem($TextToFind, $nSubItem = 0)
If ControlListView($hWnd, "", $hWndLstV, 'SelectAll') = 0 Then Return SetError(1)
Local $nCount = ControlListView($hWnd, "", $hWndLstV, 'GetSelectedCount', 0)
Local $I, $ValText
For $I = 0 To $nCount - 1
$ValText = ControlListView($hWnd, "", $hWndLstV, 'GetText', $I, $nSubItem)
ConsoleWrite('ValText=' & $ValText & ' Find=' & $TextToFind & @CRLF)
If StringInStr($ValText, $TextToFind) Then
MsgBox(0, '', 'Trouvé ! houra')
Return $I
EndIf
Next
Return SetError(2)
EndFunc
Tout cela pour dire que si tu ne postes pas ton bout de code on aura un peu de mal à te dire où le bas blesse

Re: [..] Récuperer item selectionner dans une Listview.
Posté : ven. 27 juil. 2012 10:41
par LqX
Je viens de corriger mon erreur en prenant le temps de refaire un code leger pour le postez ici
Voici ce que j'ai changer.
$selec = ControlListView($gui, "", $users, "GetSelected")
$item = ControlListView($gui, "", $users, "GetText", $selec)
Par :
$selec = ControlListView("", "", $users, "GetSelected")
$item = ControlListView("", "", $users, "GetText", $selec)
Et maintenant cela fonctionne.
Re: [R] Récuperer item selectionner dans une Listview.
Posté : ven. 27 juil. 2012 17:17
par TopXm
Hello
LqX a écrit :$selec = ControlListView("", "", $users, "GetSelected")
$item = ControlListView("", "", $users, "GetText", $selec)
C'est pas un poil dangerous ce genre de code vu que tu ne définis pas la GUI traitée ?
Je présume qu'il tente d'exécuter le code sur la GUI active, au final si ce n'est pas celle qui contient la ListView il risque de bouder sérieusement non ?
Je dis ça car j'ai eu le souci sur un
ça fonctionne très bien tant que c'est la bonne GUI qui est active. J'avais minimisé la fenêtre un peu trop tôt et lorsque le code s'est exécuté ça s'est ramassé direct, attendu qu'il est dit dans l'aide que :
The title/text is referencing the parent window, so be careful with "","" which references the active window which may not be the one containing the controlID control.
Il y a de fortes chances qu'il en soit de même pour le ControlListView, donc prudence

bon après ça se trouve je me fourvoie peut-être complétement

Re: [R] Récuperer item selectionner dans une Listview.
Posté : ven. 27 juil. 2012 18:37
par mikell
TopXm a écrit :bon après ça se trouve je me fourvoie peut-être complétement

AMHA tu as absolument raison
Si le test est lancé depuis une gui sur la listview d'une autre fenêtre, avec un bouton par exemple, c'est la gui qui est active ^^
Comme apparemment il s'agit de tester une fenêtre externe au script, ce qu'il faut c'est un WinGetHandle