Hola
aqui tienes un ejemplo para leerlo, el ejemplo devuelve un array con las lineas
para agregar un registro de prueba...
Inicie el Editor del Registro (Regedt32.exe).
Busque la siguiente clave del registro:
HKEY_LOCAL_MACHINE\Software
En el men煤 Edici贸n , haga clic en Agregar clave y, a continuaci贸n, agregue el clave Registro siguiente:
Key Name: VfpRegTest
Haga clic en la clave que agreg贸 en el paso 3. En el men煤 Edici贸n , haga clic en Agregar valor y, a continuaci贸n, agregue el siguiente valor:
Value Name: TestREG_MULTI_SZ
Data Type: REG_MULTI_SZ
Value: Line1
Line2
Line3
Line4
asegurate de presionar ENTER despues de cada linea
#include "fivewin.ch"
#define 聽HKEY_LOCAL_MACHINE 聽 聽 聽2147483650 聽 聽 聽 聽// 0x80000002
function main()
聽 聽local nKey 聽 聽:= HKEY_LOCAL_MACHINE
聽 聽local cSubKey := "Software\VfpRegTest"
聽 聽local cValue 聽:= "TestREG_MULTI_SZ" 聽
聽 聽
聽 聽xbrowse( READ_REG_MULTI_SZ( nKey, cSubKey, cValue ) )
return nil
#pragma BEGINDUMP
#include <windows.h>
#include <hbapi.h>
#include <hbapiitm.h>
LPSTR LToStr( long w );
static int NULL_tokenCount( const char * szLine, int nLen )
{
聽 聽int ul = 0, nTokens = 1;
聽 聽
聽 聽while( ul < nLen )
聽 聽{
聽 聽 聽 if( szLine[ ul ] == NULL )
聽 聽 聽 {
聽 聽 聽 聽 聽++nTokens;
聽 聽 聽 聽 聽while( ul + 1 < nLen && szLine[ ul + 1 ] == NULL )
聽 聽 聽 聽 聽 聽 ++ul;
聽 聽 聽 }
聽 聽 聽 ++ul;
聽 聽}
聽 聽return nTokens;
}
static PHB_ITEM NULL_arrayToken( const char * szLine, int nLen )
{
聽 聽int ul;
聽 聽int nTokens = NULL_tokenCount( szLine, nLen ) - 1;
聽 聽PHB_ITEM pArray;
聽 聽int nToken, nStart;
聽 聽
聽 聽pArray = hb_itemArrayNew( nTokens );
聽 聽
聽 聽if( nTokens > 0 ){
聽 聽 聽 for( ul = nStart = nToken = 0; ul < nLen; ++ul )
聽 聽 聽 {
聽 聽 聽 聽 聽if( szLine[ ul ] == NULL )
聽 聽 聽 聽 聽{
聽 聽 聽 聽 聽 聽 hb_arraySetCL( pArray, ++nToken, szLine + nStart, 聽ul - nStart 聽);
聽 聽 聽 聽 聽 聽 while( ul + 1 < nLen && szLine[ ul + 1 ] == NULL )
聽 聽 聽 聽 聽 聽 聽 聽++ul;
聽 聽 聽 聽 聽 聽 nStart = ul + 1;
聽 聽 聽 聽 聽} 聽
聽 聽 聽 }
聽 聽 聽 hb_arraySetCL( pArray, ++nToken, szLine + nStart, ul - nStart ); 聽 聽 聽 聽
聽 聽} else
聽 聽 聽 hb_arraySetC( pArray, 1, szLine );
聽 聽return pArray;
}
HB_FUNC( READ_REG_MULTI_SZ )
{
聽 聽HKEY hKey = ( HKEY ) hb_parnl( 1 );
聽 聽HKEY hHandle; 聽
聽 聽char * cSubKey = ( char * ) hb_parc( 2 );
聽 聽char * cValue 聽= ( char * ) hb_parc( 3 );
聽 聽long nErrCode;
聽 聽DWORD lpType = REG_MULTI_SZ;
聽 聽DWORD lpcbData;
聽 聽BYTE * lpData;
聽 聽PHB_ITEM pArrayReturn;
聽 聽
聽 聽nErrCode = RegOpenKey( hKey, cSubKey, &hHandle);
聽 聽
聽 聽if( nErrCode != 0 )
聽 聽{
聽 聽 聽 pArrayReturn = hb_itemArrayNew( 0 );
聽 聽 聽 hb_itemReturnRelease( pArrayReturn );
聽 聽}
聽 聽RegQueryValueEx( hHandle, cValue, NULL, &lpType, NULL, &lpcbData );
聽 聽
聽 聽lpData = ( BYTE * ) hb_xgrab( lpcbData );
聽 聽
聽 聽nErrCode = RegQueryValueEx( hHandle, cValue, NULL, &lpType, lpData, &lpcbData );
聽 聽if( nErrCode != 0 )
聽 聽{
聽 聽 聽 pArrayReturn = hb_itemArrayNew( 0 );
聽 聽 聽 RegCloseKey( hHandle );
聽 聽 聽 hb_itemReturnRelease( pArrayReturn );
聽 聽}
聽 聽
聽 聽pArrayReturn = NULL_arrayToken( ( const char * )lpData, lpcbData );
聽 聽
聽 聽hb_xfree( lpData );
聽 聽
聽 聽hb_itemReturnRelease( pArrayReturn );
}
#pragma ENDDUMP