Bonjour,
Je suis actuellement en train de développer une macro qui doit interagir avec un TreeView, j'ai récemment commencé a utiliser les "_Gui".
Malheureusement, je ne trouve pas de moyen de sélectionner un TreeView dont je ne connais pas encore le Handle.
1. J'aimerais pouvoir sélectionner le TreeView et attendre une retour d'information comme quoi cela est fait avant de passer a la suite de mon programme. (Un peux comme avec un WinwaitActive)
2. J'aimerais enregistré dans un tableau la totalité des handles du TreeView. Sachant que mon TreeView peux facilement atteindre les 2-3 milles éléments et que je ne connait pas le nombre d’élément le composant, il me faudrait une solution plus rapide qu'une boucle qui redimensionne mon tableau a chaque ajout d'un élément. (déjà essayer et très, très ,très long)
Mon problème pour le 1 étant que ma fenêtre est une sous fenêtre d'une sous fenêtre d'une fenêtre (voir image a la fin pour une meilleur compréhension).
Le but du 2 est d'accélérer la navigation au sein du TreeView (Actuellement j'utilise un send("{DOWN}") suivis d'un sleep(100) pour parcourir mon TreeView)
La fenêtre a atteindre est celle encadré en rouge. Toutes les fenêtre contenant la fenêtre cible seront entouré de différente couleur.
Merci d'avance a tous ceux qui prendront le temps de me lire.
Cordialement.
PS: désoler pour les fautes d'orthographe si il en reste.
Interaction avec un TreeView
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.
Re: Interaction avec un TreeView
Salut Kent,
$hWnd = ControlGetHandle("Titre", "", "[CLASS:Sys TreeView32; INSTANCE:1]")
MsgBox(0, "Est ce un Handle ?", $hWnd & @CRLF & IsHWnd($hWnd)) ; La tu as le Handle de ton arbre
$hWnd_1 = _GUICtrlTreeView_GetFirstItem($hWnd) ;
MsgBox(0, "Est ce un Handle ?", $hWnd_1 & @CRLF & IsHWnd($hWnd_1 )) ; La tu as le Handle du premier item
Ensuite tu fais une boucle pour récupérer l'ensemble des handles.
J'ai trouvé ca, faut juste l'adapter :
$hWnd = ControlGetHandle("Titre", "", "[CLASS:Sys TreeView32; INSTANCE:1]")
MsgBox(0, "Est ce un Handle ?", $hWnd & @CRLF & IsHWnd($hWnd)) ; La tu as le Handle de ton arbre
$hWnd_1 = _GUICtrlTreeView_GetFirstItem($hWnd) ;
MsgBox(0, "Est ce un Handle ?", $hWnd_1 & @CRLF & IsHWnd($hWnd_1 )) ; La tu as le Handle du premier item
Ensuite tu fais une boucle pour récupérer l'ensemble des handles.
J'ai trouvé ca, faut juste l'adapter :
While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
Exit
Case $GetIndex_Button
$iIndex = 0
$hItem = _GUICtrlTreeView_GetFirstItem($TreeView)
For $i = 0 To _GUICtrlTreeView_GetCount($TreeView)-1
If _GUICtrlTreeView_GetSelected($TreeView, $hItem) Then $iIndex = $i+1
$hItem = _GUICtrlTreeView_GetNext($TreeView, $hItem)
Next
MsgBox(64, "", StringFormat("Selected Text: %s\nSelected Index: %i", GUICtrlRead($TreeView, 1), $iIndex), 0, $GUI)
EndSwitch
WEnd
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
Exit
Case $GetIndex_Button
$iIndex = 0
$hItem = _GUICtrlTreeView_GetFirstItem($TreeView)
For $i = 0 To _GUICtrlTreeView_GetCount($TreeView)-1
If _GUICtrlTreeView_GetSelected($TreeView, $hItem) Then $iIndex = $i+1
$hItem = _GUICtrlTreeView_GetNext($TreeView, $hItem)
Next
MsgBox(64, "", StringFormat("Selected Text: %s\nSelected Index: %i", GUICtrlRead($TreeView, 1), $iIndex), 0, $GUI)
EndSwitch
WEnd
- walkson
- Modérateur
- Messages : 1020
- Enregistré le : ven. 12 août 2011 19:49
- Localisation : Hurepoix
- Status : Hors ligne
Re: Interaction avec un TreeView
Bonjour,
L'outil pour manœuvrer les treeviews externes est ControlTreeView ()
Voici un exemple avec le treeview de l'aide d'Autoit. Il faudra mettre à jour les chemins. Ici, j'utilise "AutoIt Help (v3.3.14.2)" qui n'est pas le plus récent
C'est long, plus de 16 minutes d'attente pour 3092 lignes !
Ce qui nous donne
L'outil pour manœuvrer les treeviews externes est ControlTreeView ()
Je ne vois pas de solution pour visiter un treeview en dehors de boucles !il me faudrait une solution plus rapide qu'une boucle
Voici un exemple avec le treeview de l'aide d'Autoit. Il faudra mettre à jour les chemins. Ici, j'utilise "AutoIt Help (v3.3.14.2)" qui n'est pas le plus récent
#include <Array.au3>
Local $array[0][4]
Local $arrayE
If Not ProcessExists('AutoIt3Help.exe') Then ShellExecute("C:\Program Files\AutoIt3\AutoIt.chm")
;se positionne sur le tab Sommaire
Do
$aa = ControlCommand ( "AutoIt Help (v3.3.14.2)", "", "SysTabControl321", "CurrentTab", "")
If $aa <> 1 Then ControlCommand ( "AutoIt Help (v3.3.14.2)", "", "SysTabControl321", "TabLeft", "")
Until $aa = 1
Sleep(500)
;compte le nombre d'éléments à la base (ici, 2)
$bb = ControlTreeView ( "AutoIt Help (v3.3.14.2)", "", "SysTreeView321", "GetItemCount", "")
MsgBox(0,"nb éléments",$bb)
$timer = TimerInit()
;visite l'arbre sur ses 4 niveaux
For $i = 0 To $bb - 1
$NV1 = ControlTreeView ( "AutoIt Help (v3.3.14.2)", "", "SysTreeView321", "GetItemCount", "#" & $i);compte le nombre d'éléments contenus dans ce niveau
$edit1 = ControlTreeView ( "AutoIt Help (v3.3.14.2)", "", "SysTreeView321", "GetText", "#" & $i ); récupère le texte
For $y = 0 To $NV1 - 1
$NV2 = ControlTreeView ( "AutoIt Help (v3.3.14.2)", "", "SysTreeView321", "GetItemCount", "#" & $i & "|#" & $y);compte le nombre d'éléments contenus dans ce niveau etc...
$edit2 = ControlTreeView ( "AutoIt Help (v3.3.14.2)", "", "SysTreeView321", "GetText", "#" & $i & "|#" & $y )
If ControlTreeView ( "AutoIt Help (v3.3.14.2)", "", "SysTreeView321", "Exists", "#" & $i & "|#" & $y & "|#0" ) = 0 Then
;s'il n'y pas de niveau supérieur, enregistre les données
$arrayE &= ($edit1 &"|"& $edit2 & @CRLF)
EndIf
For $x = 0 To $NV2 - 1
$NV3 = ControlTreeView ( "AutoIt Help (v3.3.14.2)", "", "SysTreeView321", "GetItemCount", "#" & $i & "|#" & $y & "|#" & $x)
$edit3 = ControlTreeView ( "AutoIt Help (v3.3.14.2)", "", "SysTreeView321", "GetText", "#" & $i & "|#" & $y & "|#" & $x )
ToolTip($i &"--"& $y &"--"& $x &"--"& $x &"--"& $edit3 & @CR,100,100);totalement inutile mais fait patienter
If ControlTreeView ( "AutoIt Help (v3.3.14.2)", "", "SysTreeView321", "Exists", "#" & $i & "|#" & $y & "|#" & $x & "|#0" ) = 0 Then
$arrayE &=($edit1 &"|"& $edit2 &"|"& $edit3 & @CRLF)
EndIf
For $q = 0 To $NV3 - 1
$NV4 = ControlTreeView ( "AutoIt Help (v3.3.14.2)", "", "SysTreeView321", "GetText", "#" & $i & "|#" & $y & "|#" & $x & "|#" & $q)
ToolTip($i &"--"& $y &"--"& $x &"--"& $x &"--"& $q &"--"& $NV4 & @CR,100,100)
$arrayE &= ($edit1 &"|"& $edit2 &"|"& $edit3 &"|"& $NV4 & @CRLF)
Next
Next
Next
Next
ConsoleWrite("nb minutes " & (TimerDiff($timer)/60000) & @CRLF)
_ArrayAdd($array,$arrayE)
_ArrayDisplay($array)
Local $array[0][4]
Local $arrayE
If Not ProcessExists('AutoIt3Help.exe') Then ShellExecute("C:\Program Files\AutoIt3\AutoIt.chm")
;se positionne sur le tab Sommaire
Do
$aa = ControlCommand ( "AutoIt Help (v3.3.14.2)", "", "SysTabControl321", "CurrentTab", "")
If $aa <> 1 Then ControlCommand ( "AutoIt Help (v3.3.14.2)", "", "SysTabControl321", "TabLeft", "")
Until $aa = 1
Sleep(500)
;compte le nombre d'éléments à la base (ici, 2)
$bb = ControlTreeView ( "AutoIt Help (v3.3.14.2)", "", "SysTreeView321", "GetItemCount", "")
MsgBox(0,"nb éléments",$bb)
$timer = TimerInit()
;visite l'arbre sur ses 4 niveaux
For $i = 0 To $bb - 1
$NV1 = ControlTreeView ( "AutoIt Help (v3.3.14.2)", "", "SysTreeView321", "GetItemCount", "#" & $i);compte le nombre d'éléments contenus dans ce niveau
$edit1 = ControlTreeView ( "AutoIt Help (v3.3.14.2)", "", "SysTreeView321", "GetText", "#" & $i ); récupère le texte
For $y = 0 To $NV1 - 1
$NV2 = ControlTreeView ( "AutoIt Help (v3.3.14.2)", "", "SysTreeView321", "GetItemCount", "#" & $i & "|#" & $y);compte le nombre d'éléments contenus dans ce niveau etc...
$edit2 = ControlTreeView ( "AutoIt Help (v3.3.14.2)", "", "SysTreeView321", "GetText", "#" & $i & "|#" & $y )
If ControlTreeView ( "AutoIt Help (v3.3.14.2)", "", "SysTreeView321", "Exists", "#" & $i & "|#" & $y & "|#0" ) = 0 Then
;s'il n'y pas de niveau supérieur, enregistre les données
$arrayE &= ($edit1 &"|"& $edit2 & @CRLF)
EndIf
For $x = 0 To $NV2 - 1
$NV3 = ControlTreeView ( "AutoIt Help (v3.3.14.2)", "", "SysTreeView321", "GetItemCount", "#" & $i & "|#" & $y & "|#" & $x)
$edit3 = ControlTreeView ( "AutoIt Help (v3.3.14.2)", "", "SysTreeView321", "GetText", "#" & $i & "|#" & $y & "|#" & $x )
ToolTip($i &"--"& $y &"--"& $x &"--"& $x &"--"& $edit3 & @CR,100,100);totalement inutile mais fait patienter
If ControlTreeView ( "AutoIt Help (v3.3.14.2)", "", "SysTreeView321", "Exists", "#" & $i & "|#" & $y & "|#" & $x & "|#0" ) = 0 Then
$arrayE &=($edit1 &"|"& $edit2 &"|"& $edit3 & @CRLF)
EndIf
For $q = 0 To $NV3 - 1
$NV4 = ControlTreeView ( "AutoIt Help (v3.3.14.2)", "", "SysTreeView321", "GetText", "#" & $i & "|#" & $y & "|#" & $x & "|#" & $q)
ToolTip($i &"--"& $y &"--"& $x &"--"& $x &"--"& $q &"--"& $NV4 & @CR,100,100)
$arrayE &= ($edit1 &"|"& $edit2 &"|"& $edit3 &"|"& $NV4 & @CRLF)
Next
Next
Next
Next
ConsoleWrite("nb minutes " & (TimerDiff($timer)/60000) & @CRLF)
_ArrayAdd($array,$arrayE)
_ArrayDisplay($array)
Ce qui nous donne
AutoIt|Introduction||
AutoIt|License||
AutoIt|Installation Directory||
AutoIt|Frequently Asked Questions (FAQ)||
AutoIt|Using AutoIt|Intended Use|
AutoIt|Using AutoIt|Running Scripts|
AutoIt|Using AutoIt|File Name and Path|
AutoIt|Using AutoIt|AutoIt on Windows Vista|
AutoIt|Using AutoIt|Command Line Parameters|
AutoIt|Using AutoIt|Script Editors|
AutoIt|Using AutoIt|Compiling Scripts|
AutoIt|Using AutoIt|AutoIt Window Info Tool (Au3Info)|
AutoIt|Using AutoIt|AutoIt Syntax Checker (Au3Check)|
AutoIt|Using AutoIt|Window Titles and Text (Basic)|
AutoIt|Using AutoIt|Window Titles and Text (Advanced)|
AutoIt|Using AutoIt|Controls|
AutoIt|Using AutoIt|Unicode Support|
etc....
AutoIt|License||
AutoIt|Installation Directory||
AutoIt|Frequently Asked Questions (FAQ)||
AutoIt|Using AutoIt|Intended Use|
AutoIt|Using AutoIt|Running Scripts|
AutoIt|Using AutoIt|File Name and Path|
AutoIt|Using AutoIt|AutoIt on Windows Vista|
AutoIt|Using AutoIt|Command Line Parameters|
AutoIt|Using AutoIt|Script Editors|
AutoIt|Using AutoIt|Compiling Scripts|
AutoIt|Using AutoIt|AutoIt Window Info Tool (Au3Info)|
AutoIt|Using AutoIt|AutoIt Syntax Checker (Au3Check)|
AutoIt|Using AutoIt|Window Titles and Text (Basic)|
AutoIt|Using AutoIt|Window Titles and Text (Advanced)|
AutoIt|Using AutoIt|Controls|
AutoIt|Using AutoIt|Unicode Support|
etc....
quelque chose comme ça ?J'aimerais pouvoir sélectionner le TreeView et attendre une retour d'information
If Not ProcessExists('AutoIt3Help.exe') Then ShellExecute("C:\Program Files\AutoIt3\AutoIt.chm")
;se positionne sur le tab Sommaire
Do
$aa = ControlCommand ( "AutoIt Help (v3.3.14.2)", "", "SysTabControl321", "CurrentTab", "")
If $aa <> 1 Then ControlCommand ( "AutoIt Help (v3.3.14.2)", "", "SysTabControl321", "TabLeft", "")
Until $aa = 1
ControlTreeView ( "AutoIt Help (v3.3.14.2)", "", "SysTreeView321", "Select", "User Defined Functions Reference|GDIPlus Reference|Font Management|_GDIPlus_FontCreate")
;ControlTreeView ( "AutoIt Help (v3.3.14.2)", "", "SysTreeView321", "Select", "#1|#11|#10|#0") ;autre méthode
$aa = ControlTreeView ( "AutoIt Help (v3.3.14.2)", "", "SysTreeView321", "GetSelected" , 1)
MsgBox(0,"c'est le chemin",$aa )
$bb= ControlTreeView ( "AutoIt Help (v3.3.14.2)", "", "SysTreeView321", "GetText", $aa)
MsgBox(0,"le résultat",$bb)
;en attente d'une sélection sur le TreeView de l'aide
Do
$cc = ControlTreeView ( "AutoIt Help (v3.3.14.2)", "", "SysTreeView321", "GetSelected" , 1)
Until $cc <> $aa
;résultat de la sélection
$bb= ControlTreeView ( "AutoIt Help (v3.3.14.2)", "", "SysTreeView321", "GetText", $cc)
MsgBox(0,"le résultat",$bb)
;se positionne sur le tab Sommaire
Do
$aa = ControlCommand ( "AutoIt Help (v3.3.14.2)", "", "SysTabControl321", "CurrentTab", "")
If $aa <> 1 Then ControlCommand ( "AutoIt Help (v3.3.14.2)", "", "SysTabControl321", "TabLeft", "")
Until $aa = 1
ControlTreeView ( "AutoIt Help (v3.3.14.2)", "", "SysTreeView321", "Select", "User Defined Functions Reference|GDIPlus Reference|Font Management|_GDIPlus_FontCreate")
;ControlTreeView ( "AutoIt Help (v3.3.14.2)", "", "SysTreeView321", "Select", "#1|#11|#10|#0") ;autre méthode
$aa = ControlTreeView ( "AutoIt Help (v3.3.14.2)", "", "SysTreeView321", "GetSelected" , 1)
MsgBox(0,"c'est le chemin",$aa )
$bb= ControlTreeView ( "AutoIt Help (v3.3.14.2)", "", "SysTreeView321", "GetText", $aa)
MsgBox(0,"le résultat",$bb)
;en attente d'une sélection sur le TreeView de l'aide
Do
$cc = ControlTreeView ( "AutoIt Help (v3.3.14.2)", "", "SysTreeView321", "GetSelected" , 1)
Until $cc <> $aa
;résultat de la sélection
$bb= ControlTreeView ( "AutoIt Help (v3.3.14.2)", "", "SysTreeView321", "GetText", $cc)
MsgBox(0,"le résultat",$bb)
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)