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
Code: Select all
#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