2017-02-22 1 views
0

J'utilise AutoIt et SciTE pour créer un script d'installation. Le problème que je rencontre est qu'il existe un menu arborescent pour la sélection des fonctionnalités. Je peux sélectionner l'ensemble de l'arborescence (SysTreeView32), mais je ne suis pas sûr de savoir comment y accéder pour cocher les cases sans faire un mouvement de la souris et cliquer (pas une excellente option).SciTE Script - Comment entrer dans un Tree Control pour cocher les cases

Le Treeview ressemble à ceci:

Treeview Image

Info contrôle de AutoIt est comme ceci:

Control Info

Je suis sûr qu'il est possible, tout ne peut pas figure comment le faire. C'est ma première tentative d'un tel script. Créer un fichier de réponses ne fonctionne pas pour cet exe pour une raison quelconque. Donc - ceci semble être mon seul moyen de créer une installation quelque peu silencieuse (pas plus silencieuse, mais au moins automatisée).

* EDIT - état actuel des choses *

Je découvriez comment le faire partie de cela, mais je ne peux toujours pas comprendre si les éléments sont sélectionnés avant d'y accéder. Alors - puisque ça bascule, je pourrais désactiver une fonctionnalité que je veux!

$hWnd = WinWaitActive($WindowTitle, 'Select Features') 
$tvCtl = ControlGetHandle($WindowTitle, '', 'SysTreeView321') 

$firstItem = _GUICtrlTreeView_FindItem($tvCtl, 'eBooks') 
_GUICtrlTreeView_SelectItem($tvCtl, $firstItem, $TVGN_FIRSTVISIBLE) 
_GUICtrlTreeView_ClickItem($tvCtl, $firstItem, "left", True, 1) 

Send('{SPACE}') 

Je ne pense pas que je devrais envoyer l'espace depuis que j'envoyé le ClickItem, mais semble donc.

Je pourrais aussi le faire:

ControlTreeView($hWnd, '', $tvCtl, 'Select', '#0') 
ControlSend($hWnd, '', $tvCtl, ' ') 

Cela va basculer le premier. Donc - je peux les compter tous et faire comme ça. Mais quand je vérifie pour "IsEnabled" ou "IsChecked", il dit toujours NON. Donc - je ne peux pas vérifier ceux dont j'ai seulement besoin. Je dois espérer que leur statut est ce que j'attends.

Voici comment je vérifie "IsChecked" et "IsEnabled":

If ControlCommand($hWnd, '', $logTool, 'IsEnabled') then 
    ConsoleWrite('Log Tool - IsEnabled' & @CRLF) 
Else 
    ConsoleWrite('Log Tool - NOTEnabled' & @CRLF) 
EndIf 

et

If ControlCommand($hWnd, '', $logTool, 'IsChecked') then 
    ConsoleWrite('Log Tool - IsChecked' & @CRLF) 
Else 
    ConsoleWrite('Log Tool - NOTChecked' & @CRLF) 
EndIf 

Il revient toujours NOTEnabled et NOTChecked. Je me suis assuré que j'ai exécuté la même procédure ci-dessus: FindItem, SelectItem, ClickItem. Et, l'élément correct est mis en surbrillance/sélectionné lorsque cette procédure est exécutée - je peux le voir. Donc, ce n'est pas juste de retourner une valeur correcte.

Répondre

0
Opt('WinTitleMatchMode', 2) 
$hWnd = WinGetHandle("InstallShield Wizard") ; Notice the correct title 
$hTree = ControlGetHandle($hWnd, '', "[CLASS:SysTreeView32;INSTANCE:1]") 

; == Now you can interact with the treeview with functions from "GuiTreeView.au3" 

EDIT:

Essayez cette

; Select the item so: 
_GUICtrlTreeView_SelectItem($hTree, $hItem, $TVGN_CARET) 

; Get checked state: 
_GUICtrlTreeView_GetChecked($hTree, $hItem) 

Pour plus deatails lire l'aide AutoIt.

+0

Je n'ai similaire à cela (maintenant) après des heures de tentatives - je posterai la modification ci-dessus. Je n'aime pas que je ne puisse pas déterminer si c'est "vérifié". Sinon, je pourrais accidentellement désélectionner quelque chose. :( – Andrew