DECLARE INTEGER RegOpenKey IN Win32API ; INTEGER nhKey, ; STRING cSubKey, ; INTEGER @nHandle DECLARE INTEGER RegEnumKey IN Win32API; INTEGER nHkey, ; INTEGER nSubKeyIndex, ; STRING @cNameBuf, ; INTEGER nNameSize nHKey = HKEY_LOCAL_MACHINE nMyHandle = 0 cSubkey = '\Enum\BIOS\*PNP0501\' =RegOpenKey(nHKey, cSubKey, @nMyHandle) nEnumIndex = 0 cNameBuffer = REPL(CHR(0),256) nBufSize = 256 DO WHILE RegEnumKey(nMyHandle, nEnumIndex, @cNameBuffer, @nBufSize) = 0 wait window LEFT(cNameBuffer,nBufSize-1) cNameBuffer = REPL(CHR(0),256) nBufSize = 256 nEnumIndex = nEnumIndex + 1 ENDDOThe essential logic is to use RegOpenKey() (this example) or RegOpenKeyEx() to open the registry key and retrieve a new hKey; you can the extract subkeys by calling RegEnumKey() repetitively until it returns a non-zero value from the API call. Start the enumeration by setting the VFP variable passed to the API call as nSubKeyIndex to zero, and incrementing it by one after each successful call to RegEnumKey().