找回密码
 加入我们

QQ登录

只需一步,快速开始

搜索
查看: 6720|回复: 7

RegDeleteKey不能删除多层Key的问题

[复制链接]

76

主题

375

回帖

0

精华

铜牌会员

积分
231
发表于 2009-4-14 23:28:57 | 显示全部楼层 |阅读模式
<font face="Verdana" size="4">比如在HKEY_CURRENT_USER\MyK\下有多个SubKey,而且每个SubKey还有多层SubKey,用RegDeleteKey删除HKEY_CURRENT_USER\MyK\会返回非0。请问如何删除这个Key?<br/></font>
[此贴子已经被作者于2009-4-15 14:34:29编辑过]

76

主题

375

回帖

0

精华

铜牌会员

积分
231
 楼主| 发表于 2009-4-15 14:40:47 | 显示全部楼层
<p><font size="3">我也是用枚举,这是我的代码,代码有问题,会进入死循环,不知道怎么回事?最后也删不干净。</font></p>
<p><font size="3"></font>&nbsp;</p>
<p><font face="Verdana" size="3">&nbsp;&nbsp;&nbsp; Re = RegOpenKey(HKEY_CURRENT_USER, "MyK", Jub)<br/>&nbsp;&nbsp;&nbsp; Re = RegDeleteKey(Jub, "")</font></p>
<p><font face="Verdana" size="3">&nbsp;&nbsp;&nbsp; If Re = ERROR_CANTWRITE Then</font></p>
<p><font face="Verdana" size="3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Na = Space(255)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Do</font></p>
<p><font face="Verdana" size="3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; While RegEnumKeyEx(Jub, 0, Na, 255, 0&amp;, vbNullString, ByVal 0&amp;, Ti) = 0 And _<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RegDeleteKey(Jub, Na) = 0<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Wend</font></p>
<p><font face="Verdana" size="3">Xun:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Re = RegDeleteKey(Jub, "")<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Re = RegEnumKeyEx(Jub, 0, Na, 255, 0&amp;, vbNullString, ByVal 0&amp;, Ti)</font></p>
<p><font face="Verdana" size="3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If Re = ERROR_NO_MORE_ITEMS Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Re = RegDeleteKey(Jub, "")<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Exit Do<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If</font></p>
<p><font face="Verdana" size="3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Re = RegDeleteKey(Jub, Na)</font></p>
<p><font face="Verdana" size="3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If Re = ERROR_CANTWRITE Then</font></p>
<p><font face="Verdana" size="3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Re = RegOpenKey(Jub, Na, Jub)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GoTo Xun<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If</font></p>
<p><font face="Verdana" size="3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Loop<br/>&nbsp;&nbsp;&nbsp; End If</font></p>
<p><font face="Verdana" size="3"></font>&nbsp;</p>
<p><font face="Verdana"><font size="3">弄得我都理不清该怎么写代码了。</font></p>
<p><br/></p></font>

76

主题

375

回帖

0

精华

铜牌会员

积分
231
 楼主| 发表于 2009-4-15 14:43:27 | 显示全部楼层
<p>糊涂了~</p>

275

主题

3019

回帖

1

精华

管理员

嗷嗷叫的老马

积分
17066

论坛牛人贡献奖关注奖最佳版主进步奖人气王疯狂作品奖精英奖赞助论坛勋章乐于助人勋章

QQ
发表于 2009-4-15 16:50:37 | 显示全部楼层
我改一下这个注册表模块吧.
我就是嗷嗷叫的老马了......

275

主题

3019

回帖

1

精华

管理员

嗷嗷叫的老马

积分
17066

论坛牛人贡献奖关注奖最佳版主进步奖人气王疯狂作品奖精英奖赞助论坛勋章乐于助人勋章

QQ
发表于 2009-4-16 15:21:38 | 显示全部楼层
<div class="msgheader">QUOTE:</div><div class="msgborder"><b>以下是引用<i>everyone</i>在2009-4-15 14:40:47的发言:</b><br/>
<p><font size="3">我也是用枚举,这是我的代码,代码有问题,会进入死循环,不知道怎么回事?最后也删不干净。</font></p>
<p><font size="3"></font>&nbsp;</p>
<p><font face="Verdana" size="3">&nbsp;&nbsp;&nbsp; Re = RegOpenKey(HKEY_CURRENT_USER, "MyK", Jub)<br/>&nbsp;&nbsp;&nbsp; Re = RegDeleteKey(Jub, "")</font></p>
<p><font face="Verdana" size="3">&nbsp;&nbsp;&nbsp; If Re = ERROR_CANTWRITE Then</font></p>
<p><font face="Verdana" size="3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Na = Space(255)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Do</font></p>
<p><font face="Verdana" size="3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; While RegEnumKeyEx(Jub, 0, Na, 255, 0&amp;, vbNullString, ByVal 0&amp;, Ti) = 0 And _<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RegDeleteKey(Jub, Na) = 0<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Wend</font></p>
<p><font face="Verdana" size="3">Xun:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Re = RegDeleteKey(Jub, "")<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Re = RegEnumKeyEx(Jub, 0, Na, 255, 0&amp;, vbNullString, ByVal 0&amp;, Ti)</font></p>
<p><font face="Verdana" size="3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If Re = ERROR_NO_MORE_ITEMS Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Re = RegDeleteKey(Jub, "")<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Exit Do<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If</font></p>
<p><font face="Verdana" size="3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Re = RegDeleteKey(Jub, Na)</font></p>
<p><font face="Verdana" size="3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If Re = ERROR_CANTWRITE Then</font></p>
<p><font face="Verdana" size="3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Re = RegOpenKey(Jub, Na, Jub)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GoTo Xun<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If</font></p>
<p><font face="Verdana" size="3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Loop<br/>&nbsp;&nbsp;&nbsp; End If</font></p>
<p><font face="Verdana" size="3"></font>&nbsp;</p>
<p><font face="Verdana"><font size="3">弄得我都理不清该怎么写代码了。</font></p>
<p><br/></p></font></div>
<p>你的枚举貌似没有组成递归结构.</p>
<p>&nbsp;</p>
<p>你可以参考一下我的代码:</p>
<p>&nbsp;</p>
<p><font face="Verdana"><a href="http://www.m5home.com/bbs/viewthread.php?tid=422&extra=&page=1">http://www.m5home.com/bbs/viewthread.php?tid=422&extra=&page=1</a></font></p>
<p>&nbsp;</p>
<p>我增加了递归删除功能.</p>
我就是嗷嗷叫的老马了......

76

主题

375

回帖

0

精华

铜牌会员

积分
231
 楼主| 发表于 2009-4-16 21:00:15 | 显示全部楼层
多谢老马!!!

76

主题

375

回帖

0

精华

铜牌会员

积分
231
 楼主| 发表于 2009-4-15 11:22:58 | 显示全部楼层
好像老马的那个注册表操作模块也不能删除多层Key

275

主题

3019

回帖

1

精华

管理员

嗷嗷叫的老马

积分
17066

论坛牛人贡献奖关注奖最佳版主进步奖人气王疯狂作品奖精英奖赞助论坛勋章乐于助人勋章

QQ
发表于 2009-4-15 14:34:55 | 显示全部楼层
<p>貌似本身这个API没有删除整键的功能.</p>
<p>&nbsp;</p>
<p>你可以配合RegEnumKeyEx来实现递归删除.</p>
<p>&nbsp;</p>
<p>把一个KEY下面所有的键都列出来,再一个一个删除,最后再把当前键删除.</p>
我就是嗷嗷叫的老马了......

您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

快速回复 返回顶部 返回列表