我编写了一个程序,在Windows注册表中创建以下子项:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\SpecialAccounts\UserList
我写了第二个程序,它解开了我的第一个程序 . 在删除子项之前,第二个程序必须检查子项是否包含更多子项或值 . 如果子项不包含其他子项或值,则将删除该子项 .
如何检查子项是否包含任何子项或值?
使用RegQueryInfoKey():
检索有关指定注册表项的信息 .
在它可以输出的许多不同参数中,它具有以下两个对您有用的参数:
lpcSubKeys [out,optional]指向变量的指针,该变量接收指定键包含的子键数 . 此参数可以为NULL . lpcValues [out,optional]指向变量的指针,该变量接收与键关联的值的数量 . 此参数可以为NULL .
如上所述,请注意,如果指定的键具有任何子键,则RegDeleteKey()将失败,但如果它具有任何值,则不会失败 . 因此,您根本不需要检查是否存在子键,仅用于值 . 如果没有值,则让函数正常失败 .
更简单的解决方案是使用SHDeleteEmptyKey(),如果密钥有任何子键或值,则会失败 . 然后你根本不需要手动检查 .
RegEnumKeyEx枚举子项 .
RegEnumValue枚举值 .
2 回答
使用RegQueryInfoKey():
在它可以输出的许多不同参数中,它具有以下两个对您有用的参数:
如上所述,请注意,如果指定的键具有任何子键,则RegDeleteKey()将失败,但如果它具有任何值,则不会失败 . 因此,您根本不需要检查是否存在子键,仅用于值 . 如果没有值,则让函数正常失败 .
更简单的解决方案是使用SHDeleteEmptyKey(),如果密钥有任何子键或值,则会失败 . 然后你根本不需要手动检查 .
RegEnumKeyEx枚举子项 .
RegEnumValue枚举值 .