我正在使用 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。并且,在运行此过程时,正确的项目会突出显示/选择 - 我可以看到。所以 - 它只是没有返回正确的值。