RegDeleteKey不能删除多层Key的问题
<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编辑过] <p><font size="3">我也是用枚举,这是我的代码,代码有问题,会进入死循环,不知道怎么回事?最后也删不干净。</font></p>
<p><font size="3"></font> </p>
<p><font face="Verdana" size="3"> Re = RegOpenKey(HKEY_CURRENT_USER, "MyK", Jub)<br/> Re = RegDeleteKey(Jub, "")</font></p>
<p><font face="Verdana" size="3"> If Re = ERROR_CANTWRITE Then</font></p>
<p><font face="Verdana" size="3"> Na = Space(255)<br/> Do</font></p>
<p><font face="Verdana" size="3"> While RegEnumKeyEx(Jub, 0, Na, 255, 0&, vbNullString, ByVal 0&, Ti) = 0 And _<br/> RegDeleteKey(Jub, Na) = 0<br/> Wend</font></p>
<p><font face="Verdana" size="3">Xun: Re = RegDeleteKey(Jub, "")<br/> Re = RegEnumKeyEx(Jub, 0, Na, 255, 0&, vbNullString, ByVal 0&, Ti)</font></p>
<p><font face="Verdana" size="3"> If Re = ERROR_NO_MORE_ITEMS Then<br/> Re = RegDeleteKey(Jub, "")<br/> Exit Do<br/> End If</font></p>
<p><font face="Verdana" size="3"> Re = RegDeleteKey(Jub, Na)</font></p>
<p><font face="Verdana" size="3"> If Re = ERROR_CANTWRITE Then</font></p>
<p><font face="Verdana" size="3"> Re = RegOpenKey(Jub, Na, Jub)<br/> GoTo Xun<br/> End If</font></p>
<p><font face="Verdana" size="3"> Loop<br/> End If</font></p>
<p><font face="Verdana" size="3"></font> </p>
<p><font face="Verdana"><font size="3">弄得我都理不清该怎么写代码了。</font></p>
<p><br/></p></font> <p>糊涂了~</p> 我改一下这个注册表模块吧. <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> </p>
<p><font face="Verdana" size="3"> Re = RegOpenKey(HKEY_CURRENT_USER, "MyK", Jub)<br/> Re = RegDeleteKey(Jub, "")</font></p>
<p><font face="Verdana" size="3"> If Re = ERROR_CANTWRITE Then</font></p>
<p><font face="Verdana" size="3"> Na = Space(255)<br/> Do</font></p>
<p><font face="Verdana" size="3"> While RegEnumKeyEx(Jub, 0, Na, 255, 0&, vbNullString, ByVal 0&, Ti) = 0 And _<br/> RegDeleteKey(Jub, Na) = 0<br/> Wend</font></p>
<p><font face="Verdana" size="3">Xun: Re = RegDeleteKey(Jub, "")<br/> Re = RegEnumKeyEx(Jub, 0, Na, 255, 0&, vbNullString, ByVal 0&, Ti)</font></p>
<p><font face="Verdana" size="3"> If Re = ERROR_NO_MORE_ITEMS Then<br/> Re = RegDeleteKey(Jub, "")<br/> Exit Do<br/> End If</font></p>
<p><font face="Verdana" size="3"> Re = RegDeleteKey(Jub, Na)</font></p>
<p><font face="Verdana" size="3"> If Re = ERROR_CANTWRITE Then</font></p>
<p><font face="Verdana" size="3"> Re = RegOpenKey(Jub, Na, Jub)<br/> GoTo Xun<br/> End If</font></p>
<p><font face="Verdana" size="3"> Loop<br/> End If</font></p>
<p><font face="Verdana" size="3"></font> </p>
<p><font face="Verdana"><font size="3">弄得我都理不清该怎么写代码了。</font></p>
<p><br/></p></font></div>
<p>你的枚举貌似没有组成递归结构.</p>
<p> </p>
<p>你可以参考一下我的代码:</p>
<p> </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> </p>
<p>我增加了递归删除功能.</p> 多谢老马!!! 好像老马的那个注册表操作模块也不能删除多层Key <p>貌似本身这个API没有删除整键的功能.</p>
<p> </p>
<p>你可以配合RegEnumKeyEx来实现递归删除.</p>
<p> </p>
<p>把一个KEY下面所有的键都列出来,再一个一个删除,最后再把当前键删除.</p>
页:
[1]