有的程序制作菜单目录树时会使用WinTree控件,我们想打开目录树中的某个节点时,该如何去做呢?方法如下:
(1)按照节点目录顺序一级一级的展开节点所在的目录(使用WinTree的Expand方法)
Expand方法参数有两种类型:一种是目录的名称,一种是目录的序号,由于目录的序号会随当前展开的目录的不同而可能会变化,所以我们可以使用目录的名称作为参数,那么如何知道我们想要的节点的目录名称是什么呢,当我们用spy试图去获取WinTree某个节点时,我们会发现没法定位到该节点,只能定位到WinTree控件范围,不必惊慌,先用spy把WinTree的属性获取到,我们会看见WinTree中有一个属性selection,仔细观察它的属性值,属性值刚好是WinTree中当前焦点所定位到的节点的目录名称,所以利用这个特性去获取我们想要的节点目录名称,比如我们想获取节点A的目录名称,我们先展开节点A的父目录,用鼠标点击选中节点A,然后用SPY去获取此时WinTree的属性,selection属性的属性值就是节点A的目录名称,使用的时候直接copy获取到的selection属性值即可,记住不要自己手写(手写可能会出错,比如漏掉空格等),直接Copy。
由于我们获取到的节点A的目录名称,如果我们直接打开这个目录时,可能会出错,为什么呢?因为可能我们程序执行的时候节点A是被隐藏的,没有被展开,所有我们必须把节点A的父节点展开,使节点A显示出来,那如何展开呢?仔细观察刚才获取到的节点A的selection属性值,我们会发现,父节点和子节点间是用分号(;)隔开的,所有我们可以利用这一特性,以分号为标记,将selection的属性值拆分成数字,然后利用expand方法循环打开节点A的的上层节点。
(2)展开节点完成后,选择节点(使用WinTree的Select方法)
需要打开的节点的上层节点均展开,需要选择的节点显示出来后,我们可以利用WinTree的Select方法选择节点了,参数可以使用节点的目录序号或者名称,由于序号可能会变,所以直接使用我们上一步获取到的节点的selection的属性值即可。
以下是按照以上思路封装的一个选择节点的函数:
'********************************************************
'功能:选择指定WinTree目录树节点
'参数:obj_WinTree - WinTree对象
' NodeFullPath - WinTree节点目录树完整路径
'调用方法:Ret = Select_WinTreeNode(obj_WinTree,NodeFullPath)
'********************************************************
Dim arr_WinTreeNode,WinTreeNode
On Error Resume Next
If Trim(NodeFullPath) <> "" Then
arr_WinTreeNode = Split(NodeFullPath,";")
'逐级展开目录树节点
For i = 0 To Ubound(arr_WinTreeNode)
If i = 0 Then
WinTreeNode = arr_WinTreeNode(i)
Else
WinTreeNode = WinTreeNode & ";" & arr_WinTreeNode(i)
End If
'展开节点
obj_WinTree.Expand WinTreeNode
If Err.Number <> 0 Then
'展开节点失败,退出函数
Select_WinTreeNode = False
Reporter.ReportEvent micFail,"展开目录-"&WinTreeNode,"展开目录时报错,错误信息:" & Err.Description
Err.Clear
Exit Function
Else
Reporter.ReportEvent micPass,"展开目录-"&WinTreeNode,"展开目录成功"
End If
Next
'选择目录树中的节点
obj_WinTree.Select NodeFullPath
Wait 2
Act_selection = obj_WinTree.GetROProperty("selection")
'判断是成功选择指定节点
If Err.Number = 0 Then
If Act_selection = NodeFullPath Then
'选择指定节点成功
Select_WinTreeNode = True
Reporter.ReportEvent micPass,"打开目录-"& NodeFullPath,"成功打开"
Else
Select_WinTreeNode = False
Reporter.ReportEvent micFail,"打开目录-"& NodeFullPath,"打开失败,预期打开["&NodeFullPath&"],实际打开["&Act_selection&"]"
Err.Clear
End If
'选择指定节点失败
Select_WinTreeNode = False
Reporter.ReportEvent micFail,"打开目录-"& NodeFullPath,"打开目录时报错,错误信息:" & Err.Description
Err.Clear
End If
Else
Select_WinTreeNode = False
Reporter.ReportEvent micFail,"Select_WinTreeNode函数NodeFullPath参数检查","NodeFullPath参数值为空"
Set wsh = CreateObject("Wscript.Shell")
wsh.Popup "Select_WinTreeNode(obj_WinTree,NodeFullPath)参数NodeFullPath不能空或空字符串",10
Set wsh = Nothing
End If
需求:选择windows资源管理器目录菜单桌面;我的电脑;本地磁盘 (C:);Documents and Settings下的Administrator
前置条件:先手工打开windows资源管理器
Set WindowDesc = Description.Create()
WindowDesc("regexpwndclass").Value = "ExploreWClass"
'描述WinTree对象
Set WinTreeViewDesc = Description.Create()
WinTreeViewDesc("nativeclass").Value = "SysTreeView32"
NodeFullPath = "桌面;我的电脑;本地磁盘 (C:);Documents and Settings;Administrator"