0

我正在使用 AutoIt 和 SciTE 创建安装脚本。我遇到的问题是有一个用于选择功能的树形菜单。我可以选择整个树视图(SysTreeView32),但我不确定如何在不移动鼠标并单击的情况下进入其中检查框(不是一个很好的选择)。

树视图如下所示:

树视图图像

AutoIT 的控制信息是这样的:

控制信息

我确信这是可能的,只是不知道该怎么做。这是我第一次尝试这样的脚本。由于某种原因,为此 exe 创建响应文件不起作用。所以 - 这似乎是我创建有点静默安装的唯一出路(不再静默,但至少是自动化的)。

* 编辑 - 现状 *

我确实想出了如何做到这一点,但我仍然无法确定在访问之前是否选择了这些项目。所以 - 因为它切换,我可能会关闭我想要的功能!

$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}')

自从我发送了 ClickItem 以来,我认为我不必发送空间,但似乎是这样。

我也可以这样做:

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

这将切换第一个。所以 - 我可以把它们都数一遍,然后那样做。

但是当我检查“IsEnabled”或“IsChecked”时,它总是说NO。所以 - 我不能只检查我需要的那些。我必须希望他们的状态是我所期望的。

这是我检查“IsChecked”和“IsEnabled”的方式:

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

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

它总是返回 NOTEnabled 和 NOTChecked。我确保我运行了上面相同的过程:FindItem、SelectItem、ClickItem。并且,在运行此过程时,正确的项目会突出显示/选择 - 我可以看到。所以 - 它只是没有返回正确的值。

4

1 回答 1

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"

编辑:

尝试这个

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

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

有关详细信息,请阅读 AutoIt 帮助。

于 2017-02-23T08:32:04.597 回答