确定注册表项是否包含注册表值或子项的最佳方法是什么?
What is the best way to determine if a registry key contrains registry values or subkeys?
我编写了一个程序,它在 Windows 注册表中创建了以下子项:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\SpecialAccounts\UserList
我写了第二个程序,它撤销了我第一个程序所做的事情。第二个程序必须在删除子项之前检查该子项是否包含更多子项或值。如果子项不包含其他子项或值,则子项将被删除。
如何检查子项是否包含任何子项或值?
RegEnumKeyEx
枚举子项。
RegEnumValue
枚举值。
Retrieves information about the specified registry key.
在它可以输出的众多不同的参数中,有以下两个对你有用的参数:
lpcSubKeys [out, optional]
A pointer to a variable that receives the number of subkeys that are contained by the specified key. This parameter can be NULL.
lpcValues [out, optional]
A pointer to a variable that receives the number of values that are associated with the key. This parameter can be NULL.
话虽如此,请注意,如果指定的键有任何子键,RegDeleteKey()
将失败,但如果它有任何值,则不会。所以你真的根本不需要检查子键是否存在,只需要检查值。如果没有值,让函数正常失败。
一个更简单的解决方案是改用 SHDeleteEmptyKey()
,如果键有任何子键或值,这将失败。那就完全不用手动检查了
我编写了一个程序,它在 Windows 注册表中创建了以下子项:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\SpecialAccounts\UserList
我写了第二个程序,它撤销了我第一个程序所做的事情。第二个程序必须在删除子项之前检查该子项是否包含更多子项或值。如果子项不包含其他子项或值,则子项将被删除。
如何检查子项是否包含任何子项或值?
RegEnumKeyEx
枚举子项。RegEnumValue
枚举值。
Retrieves information about the specified registry key.
在它可以输出的众多不同的参数中,有以下两个对你有用的参数:
lpcSubKeys [out, optional]
A pointer to a variable that receives the number of subkeys that are contained by the specified key. This parameter can be NULL.lpcValues [out, optional]
A pointer to a variable that receives the number of values that are associated with the key. This parameter can be NULL.
话虽如此,请注意,如果指定的键有任何子键,RegDeleteKey()
将失败,但如果它有任何值,则不会。所以你真的根本不需要检查子键是否存在,只需要检查值。如果没有值,让函数正常失败。
一个更简单的解决方案是改用 SHDeleteEmptyKey()
,如果键有任何子键或值,这将失败。那就完全不用手动检查了