Hola a todos:
Alguien a leido o trabajado alguna ves con registros de Windows de tipo REG_MULTI_SZ, son unos registros que contiene un array de cadenas separadas por un nulo.
Llevo varios días intentándolo sin éxito.
Saludos
Leer registros de Windows de tipo REG_MULTI_SZ
Leer registros de Windows de tipo REG_MULTI_SZ
Fernando Santiago
SoftWeb S.L.
SoftWeb S.L.
- Daniel Garcia-Gil
- Posts: 2365
- Joined: Wed Nov 02, 2005 11:46 pm
- Location: Isla de Margarita
- Contact:
Re: Leer registros de Windows de tipo REG_MULTI_SZ
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
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
our best documentation is the source code
Isla de Margarita Venezuela.
danielgarciagil@gmail.com
http://tdolphin.blogspot.com/
https://www.dropbox.com/referrals/NTI5N ... rc=global9
Isla de Margarita Venezuela.
danielgarciagil@gmail.com
http://tdolphin.blogspot.com/
https://www.dropbox.com/referrals/NTI5N ... rc=global9
Re: Leer registros de Windows de tipo REG_MULTI_SZ
Hola Daniel Garcia-Gil:
Muchísima gracias pedía un poco de ayuda y me lo as dado ya masticado, esta estupendo ahora mismo lo voy a probar.
Gracias
Fernando Santiago
Muchísima gracias pedía un poco de ayuda y me lo as dado ya masticado, esta estupendo ahora mismo lo voy a probar.
Gracias
Fernando Santiago
Fernando Santiago
SoftWeb S.L.
SoftWeb S.L.