 |
Club Builder Foro de C++Builder en español
|
| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
ifrit Master


Registrado: 12 Jun 2007Mensajes: 509Ubicación: La Habana, Cuba
|
Publicado: Mar 18 Nov, 2008 3:03 pm Asunto: Probelas con el Registro de Win |
|
|
Hola foro
estoy tratando de leer una clave del registro, pero se me va de las manos, yo se como leer un string, int , bool , etc...pero esta la desconozco y no veo que el builder me de opcion
la clave es de tipo REG_MULT_SZ (multi string)
espero me ayuden esta vez _________________ Todos somos ignorantes, lo que no todos ignoramos lo mismo... |
|
| Volver arriba |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Mar 18 Nov, 2008 3:53 pm Asunto: |
|
|
| Código: | //--- Leer REG_MULTI_SZ
bool RegLeeMulti(HKEY raiz, String clave, String valor, TStrings* sl)
{
bool bRet = false;
HKEY hKey;
LONG ret = RegOpenKeyEx(raiz, clave.c_str(), 0, KEY_READ, &hKey);
if (ERROR_SUCCESS == ret)
{
// Averiguamos el tamaño de buffer necesario
DWORD tamanyo = 0;
ret = RegQueryValueEx(hKey, valor.c_str(), 0, 0, 0, &tamanyo);
if (ERROR_SUCCESS == ret)
{
// Leemos el valor del campo REG_MULTI_SZ
char* szMulti = new char[tamanyo];
ret = RegQueryValueEx(hKey,valor.c_str(),0,0,szMulti,&tamanyo);
if (ERROR_SUCCESS == ret)
{
sl->Clear();
int index = 0;
while (szMulti[index])
{
sl->Add(&szMulti[index]);
index += strlen(&szMulti[index]) + 1;
}
bRet = true;
}
delete[] szMulti;
}
RegCloseKey(hKey);
}
return bRet;
} |
| Código: | //--- Grabar REG_MULTI_SZ
bool RegEscribeMulti(HKEY raiz, String clave, String valor, TStrings* sl)
{
bool bRet = false;
HKEY hKey;
LONG ret = RegOpenKeyEx(raiz, clave.c_str(), 0, KEY_WRITE, &hKey);
if (ERROR_SUCCESS == ret)
{
// Rellenamos el buffer con los datos de sl (TStrings*)
TMemoryStream* stream = new TMemoryStream;
for (int i = 0; i < sl->Count; i++)
{
if (sl->Strings[i].IsEmpty())
continue;
stream->Write(sl->Strings[i].c_str(), sl->Strings[i].Length());
stream->Write("\0", 1);
}
stream->Write("\0", 1);
DWORD tamanyo = stream->Size;
// Escribimos el valor del campo REG_MULTI_SZ
ret = RegSetValueEx(hKey,valor.c_str(), 0, REG_MULTI_SZ,
static_cast<unsigned char*>(stream->Memory), tamanyo);
if (ERROR_SUCCESS == ret)
bRet = true;
delete stream;
RegCloseKey(hKey);
}
return bRet;
} |
(Las dos funciones devuelven true si se consiguio leer/escribir la clave o false en caso contrario.)
- Un ejemplo de su uso. Supongamos que queremos leer el valor llamado "MiMulti" de la clave "HKEY_CURRENT_USER\Software\_Leo"
y lo copiamos a un TMemo (Memo1):
| Código: | RegLeeMulti(HKEY_CURRENT_USER, "Software\\_Leo", "MiMulti", Memo1->Lines); |
o bien, queremos leerlo en un TStringList:
| Código: | TStringList* sl = new TStringList;
RegLeeMulti(HKEY_CURRENT_USER, "Software\\_Leo", "MiMulti", sl);
// ...
// Hacemos uso del TStringList (sl)
// ...
delete sl; |
|
|
| Volver arriba |
|
 |
ifrit Master


Registrado: 12 Jun 2007Mensajes: 509Ubicación: La Habana, Cuba
|
Publicado: Mar 18 Nov, 2008 4:32 pm Asunto: |
|
|
Leo muchas gracias por la ayuda ya me estaba halando los pelos.
gracias _________________ Todos somos ignorantes, lo que no todos ignoramos lo mismo... |
|
| Volver arriba |
|
 |
|
|
No puedes publicar temas nuevos en este foro No puedes responder a temas en este foro No puedes editar tus mensajes en este foro No puedes borrar tus mensajes en este foro No puedes votar en las encuestas de este foro
|
© 2002–2026 Club Builder · Funciona con phpBB.
|