[R] Problème avec _GUICtrlTreeView_GetSelection

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Avatar du membre
A2Energie
Niveau 5
Niveau 5
Messages : 143
Enregistré le : ven. 15 nov. 2013 20:22
Status : Hors ligne

[R] Problème avec _GUICtrlTreeView_GetSelection

#1

Message 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.
Modifié en dernier par A2Energie le jeu. 12 janv. 2017 12:37, modifié 1 fois.
Avatar du membre
franco
Niveau 7
Niveau 7
Messages : 343
Enregistré le : lun. 03 oct. 2011 22:37
Localisation : Liévin
Status : Hors ligne

Re: [..] Problème avec _GUICtrlTreeView_GetSelection  

#2

Message 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. :)


++
L'entraide, c'est mon dada ;)
Avatar du membre
A2Energie
Niveau 5
Niveau 5
Messages : 143
Enregistré le : ven. 15 nov. 2013 20:22
Status : Hors ligne

Re: [..] Problème avec _GUICtrlTreeView_GetSelection

#3

Message 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)
Répondre