Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Probelas con el Registro de Win

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Probelas con el Registro de Win Responder citando

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
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

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
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

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
Ver perfil de usuario Enviar mensaje privado Enviar email
Mostrar mensajes de anteriores:   
Cambiar a:  
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


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.