Page 1 sur 1

[R] Problème avec _GUICtrlTreeView_GetSelection

Posté : dim. 18 déc. 2016 11:30
par A2Energie
Bonjour amis Autoitiens,

Désolé pour le titre, je ne savais pas comment synthétiser mon problème.

J'essaye d’interagir avec un logiciel indépendant de Autoit.

Pour ce faire, il me faut controler un Treeview. Par exemple sélectionner un item, renommer un item ect...
Bien sure il existe des fonctions tels que ControlCommand ou ControlTreeView
Mais ces dernières sont un peu légère et ne marche pas sur toutes les commandes.
Donc j'essaye de passer par _GUICtrlTreeView...
; Pour ce faire, j'importe le Handle de mon Treeview avec :
$Handle_TreeView = ControlGetHandle($oObjet_Windows, "", "[CLASS:TMonTree; INSTANCE:1]")
; Puis j'importe le Handle de l'item selectionné avec :
$Handle_Item = _GUICtrlTreeView_GetSelection($Handle_TreeView) ; RETURN ==> 0x04B15D18
; Ici $Handle_Item est bien un Handle (enfin presque) Par exemple : 0x04B15D18
; Et pourtant lorsque je test ce Handle, le résultat me retourne 0 avec :
MsgBox(0, "", IsHWnd($Handle_Item)) ; RETURN ==>  0
Donc sans le Handle de mon Item, l'interaction avec ce dernier semble compromis.
Avez vous une idée d'ou peut provenir le problème ?

Merci pour votre aide.

Re: [..] Problème avec _GUICtrlTreeView_GetSelection  

Posté : lun. 19 déc. 2016 22:48
par franco
Salut.

Tu devrais rechercher ici ce que tlem a pondu par rapport à la treeview, tu aurais surement résolu ton souci...

Encore faut-il savoir que la solution est dedans, puisque cela ne fait pas la même chose que toi...

https://www.autoitscript.fr/forum/viewt ... 857#p20857


Je te met le passage en question :

Code : Tout sélectionner

            $hSelect = _GUICtrlTreeView_GetSelection($hTreeView)
            If $hSelect Then
                $sText = _GUICtrlTreeView_GetText($hTreeView, $hSelect)
                MsgBox(64, "ShellTristateTreeViewDemo - Info", _ShellTreeView_GetSelected($hTreeView, $sText, $hSelect, true))
            EndIf
donc peut-être avec un _GUICtrlTreeView_GetText ;)


Mais bon, je me trompe surement... Vu qu'on peut pas tester. :)


++

Re: [..] Problème avec _GUICtrlTreeView_GetSelection

Posté : jeu. 12 janv. 2017 12:35
par A2Energie
Bonjour Franco et merci pour ta réponse,

Après plusieurs tests, en effet ta solution fonctionne.
Pour la petite histoire je pense que le (Handle) renvoyé par la fonction _GUICtrlTreeView_GetSelection($Handle_TreeView) n'est pas un vrai Handle (utilisable par d'autres fonctions de Autoit), car il ne fonctionne qu'avec les fonctions _GUICtrlTreeView_..., dès qu'on essaye de le faire fonctionner avec tout autre control natifs de Autoit, cela ne fonctionne pas.

Si ca peut aider, j'ai dû passé par la fonction WinAPI afin de contourner le problème.
Voici un exemple : permet de cliquer sur l'item du tableau tout en décalant de x et y pixel le pointeur
$tRect = ""
   $tPoint = ""
   $Click_Bouton = "LEFT"
   $Click_X = ""
   $Click_Y = ""
   $Decale_X = 5
   $Decale_Y = 10
   $Mode = ""
   $Click_Pos = ""
   
   $Handle_TreeView  = ControlGetHandle($oObjet_Windows, "", "[CLASS:TMonTree; INSTANCE:1]")
   $Handle_Item = _GUICtrlTreeView_GetSelection($Handle_TreeView)
   $tRect = _GUICtrlTreeView_DisplayRectEx($Handle_TreeView, $Handle_Item, True)
   If @error Then Return SetError(@error, @error, 0)
   $tPoint = _WinAPI_PointFromRect($tRect, False)
   _WinAPI_ClientToScreen($Handle_TreeView , $tPoint)
   _WinAPI_GetXYFromPoint($tPoint, $Click_X, $Click_Y)
   $Mode = Opt("MouseCoordMode", 1)
   $Click_Pos = MouseGetPos()
   MouseClick($Click_Bouton, $Click_X + $Decale_X, $Click_Y + $Decale_Y, 1, 0)
   MouseMove($Click_Pos[0], $Click_Pos[1], 0)
   Opt("MouseCoordMode", $Mode)