PROCEDURE GetKeyValue * Obtains a value from a registry key * Note: this routine only handles Data strings (REG_SZ) LPARAMETER cValueName,cKeyValue LOCAL lpdwReserved,lpdwType,lpbData,lpcbData,nErrCode STORE 0 TO lpdwReserved,lpdwType STORE SPACE(256) TO lpbData STORE LEN(m.lpbData) TO m.lpcbData DO CASE CASE TYPE("THIS.nCurrentKey")#'N' OR THIS.nCurrentKey = 0 RETURN ERROR_BADKEY CASE TYPE("m.cValueName") #"C" RETURN ERROR_BADPARM ENDCASE m.nErrCode=RegQueryValueEx(THIS.nCurrentKey,m.cValueName,; m.lpdwReserved,@lpdwType,@lpbData,@lpcbData) * Check for error IF m.nErrCode # ERROR_SUCCESS RETURN m.nErrCode ENDIF * Make sure we have a data string data type IF lpdwType # REG_SZ RETURN ERROR_NONSTR_DATA ENDIF m.cKeyValue = LEFT(m.lpbData,m.lpcbData-1) RETURN ERROR_SUCCESS ENDPROCIt seems pretty straightforward to write a method to evaluate any REG_EXPAND_SZ value type since the variables are surrounded by %variable_name%.