Manipulando o registro do Windows



#include "registry.hpp"
#pragma hdrstop
#pragma argsused

#define MY_KEY "\\Software\\Bravo"

void main(int argc, char *argv[])
{
    TRegistry *reg = new TRegistry;
    reg->RootKey = HKEY_LOCAL_MACHINE;
	
	/*
		RootKey pode ser:
		
		HKEY_CLASSES_ROOT, HKEY_CURRENT_USER, HKEY_LOCAL_MACHINE,
		HKEY_USERS, HKEY_CURRENT_CONFIG
	*/

    AnsiString nome;
    int idade;
    bool val;

    // se existir a chave (HKEY_LOCAL_MACHINE\\Software\\Bravo\\COPY), deletamos
    if(reg->OpenKey(MY_KEY " COPY", false))
		reg->DeleteKey(MY_KEY " COPY");
    
	// Vamos tentar abrir a chave
	// o segundo parametro "false" indica que nao é para criar, caso a chave nao exista
    if(reg->OpenKey(MY_KEY, false)) { 
         
		// A chave existe !
		// vamos ler os valores do registro
          
		if(reg->ValueExists("nome"))
            nome = reg->ReadString("nome"); // String
          
		if(reg->ValueExists("idade"))
            idade = reg->ReadInteger("idade"); // Integer
          
		if(reg->ValueExists("dummy")) {
            val = reg->ReadBool("dummy"); // Bool
            if (val == true)
                reg->DeleteValue("dummy");  //deletando um valor
        }

        // obtendo informacoes da chave MY_KEY
        TRegKeyInfo info;
        reg->GetKeyInfo(info);
        int numsubkeys = info.NumSubKeys;

        // obtendo o nome das sub-chaves
        TStringList* list = new TStringList();
        reg->GetKeyNames(list);

        // verificando se existe alguma sub-chave
        if (numsubkeys > 0) {
             AnsiString nkey;

			// varremos as sub-chaves
			for(int i = 0; i < numsubkeys; i++) { 
				nkey.printf(MY_KEY"\\%s", list->Strings[i]);
				if (reg->OpenKey(nkey, false)) {
					 // leio os valores     
				}
			}
        }

        // criamos uma copia da chave MY_KEY
        reg->MoveKey(MY_KEY, MY_KEY " COPY", false);  // false indica que nao é para deletar a chave copiada

    } else {
        
		// a chave não existe, vamos cria-la (segundo parametro "true" ira criar, caso não exista) 
		if(reg->OpenKey(MY_KEY, true)) {
            
			// vamos escrever os valores no registro
            
			reg->WriteString("nome", "Anderson"); // String
            reg->WriteInteger("idade", 26); // Integer
            reg->WriteBool("dummy", true); // Bool
        }
    }
    
    delete reg;
}

Para saber mais acesse: http://msdn.microsoft.com/en-us/library/windows/desktop/ms724875(v=vs.85).aspx




Comentários

Copyright © 2018 Anderson Bravo
www.andersonbravo.com.br
anderson@andersonbravo.com.br