LOCAL lpszValue,lpcchValue,lpdwReserved LOCAL lpdwType,lpbData,lpcbData LOCAL nErrCode LOCAL nKeyEntry nKeyEntry = 0 DIMENSION tValue(1,3) DO WHILE .T. nKeyEntry = m.nKeyEntry + 1 *05/22/2007 08:30:33- GLR ------------------------- * key Value *-------------------------------------------------- STORE 0 TO lpdwReserved,lpdwType,nErrCode STORE SPACE(256) TO lpbData, lpszValue STORE LEN(lpbData) TO m.lpcchValue STORE LEN(lpszValue) TO m.lpcbData nErrCode = RegOpenKey(&hKey,cKey,@nCurrentKey) *-- if does not exist, and value provide, create IF nErrCode==0 nErrCode=RegEnumValue(nCurrentKey,; M.nKeyEntry,; @lpszValue,; @lpcchValue,; M.lpdwReserved,; @lpdwType,; @lpbData,; @lpcbData; ) DO CASE CASE m.nErrCode = ERROR_EOF EXIT CASE m.nErrCode # ERROR_SUCCESS EXIT ENDCASE =RegCloseKey(nCurrentKey) ELSE EXIT ENDIF * Set array values DIMENSION tValue(m.nKeyEntry ,3) tValue(m.nKeyEntry,1) = LEFT(m.lpszValue,m.lpcchValue) *!* Const REG_SZ = 1 *!* Const REG_EXPAND_SZ = 2 *!* Const REG_BINARY = 3 *!* Const REG_DWORD = 4 *!* Const REG_MULTI_SZ = 7 DO CASE CASE lpdwType = REG_SZ tValue(m.nKeyEntry,2) = LEFT(m.lpbData,m.lpcbData-1) CASE lpdwType = REG_EXPAND_SZ && AND !THIS.lDisAllowExpanded tValue(m.nKeyEntry,2) = LEFT(m.lpbData,m.lpcbData-1) CASE lpdwType = REG_BINARY * Don't support binary tValue(m.nKeyEntry,2) = REG_BINARY_LOC CASE lpdwType = REG_DWORD * You will need to use ASC() to check values here. tValue(m.nKeyEntry,2) = LEFT(m.lpbData,m.lpcbData-1) OTHERWISE tValue(m.nKeyEntry,2) = REG_UNKNOWN_LOC ENDCASE *-- type tValue(m.nKeyEntry,3) = lpdwType ENDDO IF m.nErrCode = ERROR_EOF AND m.nKeyEntry # 0 m.nErrCode = ERROR_SUCCESS ENDIF RETURN m.nErrCodeThanks