#DEFINE ERROR_SUCCESS 0
#DEFINE HKEY_CLASSES_ROOT 0x80000000
#DEFINE HKEY_CURRENT_USER 0x80000001
#DEFINE HKEY_LOCAL_MACHINE 0x80000002
#DEFINE HKEY_USERS 0x80000003
#DEFINE HKEY_PERFORMANCE_DATA 0x80000004
#DEFINE HKEY_CURRENT_CONFIG 0x80000005
#DEFINE HKEY_DYN_DATA 0x80000006
DO decl
CREATE CURSOR csKeys (topkey C(30), subkey C(50))
* = enumKeys ("HKEY_CLASSES_ROOT", HKEY_CLASSES_ROOT)
= enumKeys ("HKEY_CURRENT_USER", HKEY_CURRENT_USER)
= enumKeys ("HKEY_LOCAL_MACHINE", HKEY_LOCAL_MACHINE)
* = enumKeys ("HKEY_USERS", HKEY_USERS)
* = enumKeys ("HKEY_PERFORMANCE_DATA", HKEY_PERFORMANCE_DATA)
* = enumKeys ("HKEY_CURRENT_CONFIG", HKEY_CURRENT_CONFIG)
* = enumKeys ("HKEY_DYN_DATA", HKEY_DYN_DATA)
SELECT csKeys
INDEX ON topkey+subkey TAG subkey
GO TOP
BROWSE NORMAL NOWAIT
PROCEDURE enumKeys (lcTopKey, hTopKey)
LOCAL lnIndex, lcName, lnNameLen
lnIndex = 0
DO WHILE .T.
lnNameLen = 250
lcName = Repli (Chr(0), lnNameLen)
IF SHEnumKeyEx (hTopKey, lnIndex, @lcName, @lnNameLen) = ERROR_SUCCESS
INSERT INTO csKeys VALUES (lcTopKey, Left (lcName, lnNameLen))
ELSE
EXIT
ENDIF
lnIndex = lnIndex + 1
ENDDO
RETURN
PROCEDURE decl
DECLARE INTEGER SHEnumKeyEx IN shlwapi;
INTEGER hkey,;
INTEGER dwIndex,;
STRING @ pszName,;
INTEGER @ pcchName
|