本帖最后由 vigiles 于 2014-3-3 11:47 编辑
希望实现注册表的树状查询与显示,得到键的树状图和每个节点的项。
代码写了很久,想通过递归实现效果,但算法上一直有错误,希望各位不吝赐教!
下面是目前有bug的代码:;父键
Dim $fatherPath = "HKCC64"
ConsoleWrite("父键__" & $fatherPath & @CRLF & @CRLF)
Dim $i = 1
enumKey($fatherPath, $i)
;遍历键
func enumKey($keyPath, $ttt)
ConsoleWrite("1.键路径:" & $keyPath & ",索引$i:" & $ttt & @CRLF)
;(1)首先遍历本路径的 项
enumVal ($keyPath, 1 )
;(2)然后遍历本路径的子键【父键,索引】
Local $key = RegEnumKey($keyPath, $ttt)
If @error = 0 Then
;(3)如果读到了第一个子键
Local $valPath = $keyPath & "" & $key
ConsoleWrite("6. 下一级路径:" & $valPath & @CRLF) ;调用@error就会改变其值
;(5)遍历子键内的 项
enumVal ($valPath, 1 )
;(6)遍历下一级子键
enumKey($valPath, 1)
Else
;(4)如果没有子键
ConsoleWrite("7. 下一级路径错误!" & @CRLF)
$i = $i + 1
enumKey($fatherPath, $i)
endif
;(6)遍历下一个子键
ConsoleWrite(@CRLF)
endfunc
;遍历项
func enumVal($valPath, $jjjj)
ConsoleWrite("2. 子键路径:" & $valPath & ",索引$j:" & $jjjj & @CRLF)
;返回键的项(键,索引)
Local $val = RegEnumVal($valPath, $jjjj)
If @error = 0 Then
ConsoleWrite("3. 项名称:" & $val & @CRLF)
;返回项的值(键,项)
Local $p = RegRead($valPath, $val)
ConsoleWrite("4. 读取项值:" & $p & @CRLF)
enumVal ($valPath, $jjjj + 1 )
Else
ConsoleWrite("5. 项名称失败!" & @CRLF)
endif
endfunc
|