nyistjz 发表于 2020-7-13 14:07:31

【求教】注册表多级嵌套删除!

本帖最后由 nyistjz 于 2021-1-5 09:15 编辑


[*]我这边有写了一个简单的删除注册表程序,但目前只能删除一级嵌套的内容,如果里面嵌套的多了,就无法删除,请朋友们帮忙看一下,如何删除多级嵌套。
[*]如图的注册表样式,只能删除两级,请高手帮忙改造成可以删除任意多级嵌套,谢谢。
[*]
[*]
[*](defun registrydelete(regpath)
[*](foreach name (vl-registry-descendents regpath)
[*]    (vl-registry-delete (strcat regpath "\\" name))
[*]    (vl-registry-delete regpath)
[*])
[*])
[*](foreach name
[*](list
[*]    "HKEY_CURRENT_USER\\Software\\Autodesk\\avzztls1"
[*]    "HKEY_CURRENT_USER\\Software\\Autodesk\\avzztls2"
[*])
[*](registrydelete name)
[*])





tryhi 发表于 2020-7-13 16:35:46

本帖最后由 tryhi 于 2020-7-13 16:41 编辑

(command "SHELL" "reg delete HKEY_CURRENT_USER\\Software\\Autodesk\\avzztls2 /f")

一句话的事情搞那么复杂干嘛呢

想不用shell或者其他外部命令,你要写递归

nyistjz 发表于 2021-1-4 11:21:28

请教高手,如果用递归的办法,这个函数如何来写,感谢 !

nyistjz 发表于 2022-1-1 11:18:21

搞定

        ;注册信息删除
        (defun reginfodelete(p / fold)
                (defun Fold(p);参数d为全局函数
                        (setq d (cons p d))
                        (foreach x (vl-registry-descendents p)(Fold(strcat p "\\" x)))
                        d ;倒序的文件列表,reverse可倒置扶正后返回
                )
                (foreach f (Fold p) (vl-registry-delete f))
        )
        ;注册表清除的两种办法
        (setq plist (list
                                                                        "HKEY_CURRENT_USER\\Software\\Autodesk\\avzztls"
                                                                        (strcat "HKEY_CURRENT_USER\\"(vlax-product-key)"\\Applications\\AutoCAD DuoTab.dll")
                                                                        (strcat "HKEY_CURRENT_USER\\"(vlax-product-key)"\\Applications\\HotKeys.NET")
                                                                        (strcat "HKEY_CURRENT_USER\\"(vlax-product-key)"\\Applications\\HotKeysCaps")
                                                                ))
        (foreach p plist (reginfodelete p));注册表清除法

烟盒迷唇 发表于 2022-2-1 19:53:31

我也试试看
页: [1]
查看完整版本: 【求教】注册表多级嵌套删除!