begin process at 2012 02 09 08:24:03
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

API

 > GESTION BASE DE REGISTRE (LOCAL OU DISTANTE)AVEC DES FONCTIONS API(NEW)

GESTION BASE DE REGISTRE (LOCAL OU DISTANTE)AVEC DES FONCTIONS API(NEW)


 Information sur la source

Note :
Aucune note
Catégorie :API Classé sous :registre, api Niveau :Initié Date de création :02/06/2006 Date de mise à jour :03/06/2006 20:36:58 Vu :8 234

Auteur : UKR6900

Ecrire un message privé
Commentaire sur cette source (7)
Ajouter un commentaire et/ou une note

 Description

Avec toutes mes excuses de la version précédente, il s'agit d'une première
ébauche qui part inadvertance, j'ai mis à disposition.
Voici la bonne version:
Elle permet dans une base de registre distante ou local(valeur NULL):
-Lecture de clé et valeur.
-Création d'une clé et valeur.
-Suppression d'une clé ou valeur.
Ce code contient un petit programme pour tester les fonctions.
Rem:Compilation avec Borland C++ 5.5 (pas d'erreur de compil).

Source

  • //----------------------------------------------------------------------------
  • // Designation : Gestion base de registre
  • // Auteur : UKR6900
  • // Date : 01/06/2006
  • // Date dernier MAJ : 03/06/2006
  • // D'après le Prg de :
  • //----------------------------------------------------------------------------
  • #include <stdio>
  • #include <stdlib>
  • #include <windows>
  • #include <ostream>
  • const int cstMaxRegLength = 1024;
  • //------------------------------------------------------------------------------
  • // FONCTION : QuesryKey
  • // DESCRIPTION : Permet de lire la valeur d'une clé de regsitre
  • //-------------------------------------------------------------------------------
  • string GetValueData(HKEY hkTopKey, string lpSubKey, string lpValueName){
  • HKEY hkKey;
  • DWORD lpType, dwDataSize = cstMaxRegLength;
  • //Receptionne la valeur de réception lecture clé registre
  • unsigned char * lpData = new unsigned char[cstMaxRegLength];
  • //Receptionne la valeur de réception lecture clé registre
  • char * rValue = new char[cstMaxRegLength];
  • rValue[0] = '\0';
  • //Lecture de la clé registre si ok passe à la suite...
  • if (RegOpenKeyEx(hkTopKey,lpSubKey.c_str(),0,KEY_READ,&hkKey) == ERROR_SUCCESS){
  • if (RegQueryValueEx(hkKey,lpValueName.c_str(),NULL,&lpType,lpData,&dwDataSize) == ERROR_SUCCESS){
  • //déchiffrage des différents type de clé dans registry
  • switch ((int)lpType){
  • case REG_BINARY:
  • itoa((u_int)(lpData[0]),rValue, 10);
  • strcat(rValue,".");
  • itoa((u_int)(lpData[1]),(char*)(rValue+strlen(rValue)),10);
  • strcat(rValue,".");
  • itoa((u_int)(lpData[2]),(char*)(rValue+strlen(rValue)),10);
  • strcat(rValue,".");
  • itoa((u_int)(lpData[3]),(char*)(rValue+strlen(rValue)),10);
  • break;
  • case REG_DWORD:
  • itoa(*(int*)(lpData),rValue,10);
  • break;
  • case REG_EXPAND_SZ:
  • rValue=(char *)lpData;
  • break;
  • case REG_MULTI_SZ:
  • rValue=(char *)lpData;
  • break;
  • case REG_SZ:
  • rValue=(char *)lpData;
  • break;
  • }//end switch
  • }//end if
  • RegCloseKey(hkKey);
  • }//end if
  • return rValue;
  • }//end function
  • //------------------------------------------------------------------------------
  • // FONCTION : CreateKey
  • // DESCRIPTION : Permet de creer une cle, une valeur et de modifier une valeur
  • //-------------------------------------------------------------------------------
  • long CreateKey(HKEY hkTopKey,const char *lpSubKey,const char *lpClass,const char *lpData){
  • HKEY keyHandle;
  • DWORD lpdw;
  • //Afin de placer la valeur vous devez indiquer la longueur du lpData.
  • int aLen = strlen(lpData) + 1;
  • //Ceci créera la clef si elle n'existe pas ou ne la met pas à jour s'il elle existe.
  • if ( RegCreateKeyEx(hkTopKey,lpSubKey,0,"Anything",REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,0,&keyHandle,&lpdw)== ERROR_SUCCESS){
  • //Ceci écrira les données à la clef nouvellement créée ou les mettra à jour.
  • long rtn=RegSetValueEx(keyHandle,lpClass,0,REG_SZ,(LPBYTE)lpData,aLen);
  • //il faut fermer la cle de registre
  • RegCloseKey(keyHandle);
  • return rtn;
  • }//end if
  • //ferme le canal de communication (handle)
  • RegCloseKey(hkTopKey);
  • return 1;
  • }//end function
  • //---------------------------------------------------------------------------------
  • // FONCTION : DeleteKey
  • // DESCRIPTION : Permet de supprimer une cle et les valeurs contenues dans la cle
  • //----------------------------------------------------------------------------------
  • long DeleteKey(HKEY hkTopKey,char *clpPathKey){
  • HKEY hkKey;
  • //Verifie si la cle specifiee existe
  • if (RegOpenKeyEx(hkTopKey,clpPathKey,0,KEY_READ|KEY_WRITE,&hkKey) == ERROR_SUCCESS){
  • //Efface la cle
  • long rtn=RegDeleteKey(hkTopKey,clpPathKey);
  • RegCloseKey(hkTopKey);
  • return rtn;
  • }//end if
  • //ferme le canal de communication (handle)
  • RegCloseKey(hkTopKey);
  • return 1;
  • }//end function
  • //------------------------------------------------------------------------------
  • // START PROGRAM
  • //-------------------------------------------------------------------------------
  • int main(){
  • string NomPc; //Si le pc est locale
  • string Valeur; //Récupére la valeur de la clé
  • // string NomPc = "\\\\PC050001494"; //Si le pc est distant
  • int error = 0;
  • HKEY hkKey;
  • //-------------------------------------------------------------
  • //Connection à distance sur le pc Remote ou locale
  • if (RegConnectRegistry(NomPc.c_str(),HKEY_LOCAL_MACHINE,&hkKey) != ERROR_SUCCESS){
  • printf("Ordinateur %s non trouvé\n", NomPc);
  • error = 2;
  • }else {
  • Valeur = GetValueData(hkKey,"SOFTWARE\\Microsoft\\Internet Connection Wizard","InstallationDirectory");
  • cout << Valeur << endl;
  • }//end if
  • //-------------------------------------------------------------
  • //cree une cle et une valeur dans la base de registre
  • if (RegConnectRegistry(NomPc.c_str(),HKEY_LOCAL_MACHINE,&hkKey) != ERROR_SUCCESS){
  • printf("Ordinateur %s non trouvé\n", NomPc);
  • error = 2;
  • }else {
  • if(CreateKey(hkKey,"Software\\Folder1","MyKey","MyValue")== ERROR_SUCCESS)
  • cout << "création réussie" << endl;
  • else
  • cout << "Problème de création!" << endl;
  • //end if
  • }//end if
  • //-------------------------------------------------------------
  • //cree une cle et une valeur dans la base de registre
  • if (RegConnectRegistry(NomPc.c_str(),HKEY_LOCAL_MACHINE,&hkKey) != ERROR_SUCCESS){
  • printf("Ordinateur %s non trouvé\n", NomPc);
  • error = 2;
  • }else {
  • if(DeleteKey(hkKey,"Software\\Folder1")== ERROR_SUCCESS)
  • cout << "Effacement réussie" << endl;
  • else
  • cout << "Problème de la suppression!" << endl;
  • //end if
  • }//end if
  • //-------------------------------------------------------------
  • return error;
  • }//end programme
  • //------------------------------------------------------------------------------
  • // END PROGRAM
  • //-------------------------------------------------------------------------------
//---------------------------------------------------------------------------- 
// Designation : Gestion base de registre 
// Auteur : UKR6900 
// Date : 01/06/2006 
// Date dernier MAJ : 03/06/2006 
// D'après le Prg de : 
//---------------------------------------------------------------------------- 
  
#include <stdio> 
#include <stdlib> 
#include <windows> 
#include <ostream> 
  
  
  const int cstMaxRegLength = 1024; 
  
//------------------------------------------------------------------------------ 
// FONCTION : QuesryKey 
// DESCRIPTION : Permet de lire la valeur d'une clé de regsitre 
//------------------------------------------------------------------------------- 
  string GetValueData(HKEY hkTopKey, string lpSubKey, string lpValueName){ 
    HKEY hkKey; 
    DWORD lpType, dwDataSize = cstMaxRegLength; 
  
  //Receptionne la valeur de réception lecture clé registre 
    unsigned char * lpData = new unsigned char[cstMaxRegLength]; 
    
  //Receptionne la valeur de réception lecture clé registre 
    char * rValue = new char[cstMaxRegLength]; 
    rValue[0] = '\0';
  //Lecture de la clé registre si ok passe à la suite... 
    if (RegOpenKeyEx(hkTopKey,lpSubKey.c_str(),0,KEY_READ,&hkKey) == ERROR_SUCCESS){ 
  
      if (RegQueryValueEx(hkKey,lpValueName.c_str(),NULL,&lpType,lpData,&dwDataSize) == ERROR_SUCCESS){ 
      //déchiffrage des différents type de clé dans registry 
        switch ((int)lpType){ 
  
          case REG_BINARY: 
               itoa((u_int)(lpData[0]),rValue, 10); 
               strcat(rValue,"."); 
               itoa((u_int)(lpData[1]),(char*)(rValue+strlen(rValue)),10); 
               strcat(rValue,"."); 
               itoa((u_int)(lpData[2]),(char*)(rValue+strlen(rValue)),10); 
               strcat(rValue,"."); 
               itoa((u_int)(lpData[3]),(char*)(rValue+strlen(rValue)),10); 
               break; 
  
          case REG_DWORD: 
               itoa(*(int*)(lpData),rValue,10); 
               break; 
  
          case REG_EXPAND_SZ: 
               rValue=(char *)lpData; 
               break; 
  
          case REG_MULTI_SZ: 
               rValue=(char *)lpData; 
               break; 
  
          case REG_SZ: 
               rValue=(char *)lpData; 
               break; 
        }//end switch 
      }//end if 
      RegCloseKey(hkKey); 
    }//end if 
    return rValue; 
  }//end function 
  
//------------------------------------------------------------------------------ 
// FONCTION : CreateKey 
// DESCRIPTION : Permet de creer une cle, une valeur et de modifier une valeur 
//------------------------------------------------------------------------------- 
  long CreateKey(HKEY hkTopKey,const char *lpSubKey,const char *lpClass,const char *lpData){ 
    HKEY keyHandle; 
    DWORD lpdw; 
  //Afin de placer la valeur vous devez indiquer la longueur du lpData. 
    int aLen = strlen(lpData) + 1; 
  
  //Ceci créera la clef si elle n'existe pas ou ne la met pas à jour s'il elle existe. 
    if ( RegCreateKeyEx(hkTopKey,lpSubKey,0,"Anything",REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,0,&keyHandle,&lpdw)== ERROR_SUCCESS){ 
    //Ceci écrira les données à la clef nouvellement créée ou les mettra à jour. 
      long rtn=RegSetValueEx(keyHandle,lpClass,0,REG_SZ,(LPBYTE)lpData,aLen); 
    //il faut fermer la cle de registre 
      RegCloseKey(keyHandle); 
      return rtn; 
     }//end if 
  
  //ferme le canal de communication (handle) 
    RegCloseKey(hkTopKey); 
     
    return 1; 
  }//end function 
  
//--------------------------------------------------------------------------------- 
// FONCTION : DeleteKey 
// DESCRIPTION : Permet de supprimer une cle et les valeurs contenues dans la cle 
//---------------------------------------------------------------------------------- 
  long DeleteKey(HKEY hkTopKey,char *clpPathKey){ 
    HKEY hkKey; 
  //Verifie si la cle specifiee existe 
    if (RegOpenKeyEx(hkTopKey,clpPathKey,0,KEY_READ|KEY_WRITE,&hkKey) == ERROR_SUCCESS){ 
    //Efface la cle 
      long rtn=RegDeleteKey(hkTopKey,clpPathKey); 
      RegCloseKey(hkTopKey); 
      return rtn; 
     }//end if 
  
  //ferme le canal de communication (handle) 
    RegCloseKey(hkTopKey); 
    return 1; 
  }//end function 
  
//------------------------------------------------------------------------------ 
// START PROGRAM 
//------------------------------------------------------------------------------- 
  int main(){ 
    string NomPc; //Si le pc est locale 
    string Valeur; //Récupére la valeur de la clé
   // string NomPc = "\\\\PC050001494"; //Si le pc est distant 
    int error = 0; 
    HKEY hkKey; 
  
//------------------------------------------------------------- 
  //Connection à distance sur le pc Remote ou locale 
    if (RegConnectRegistry(NomPc.c_str(),HKEY_LOCAL_MACHINE,&hkKey) != ERROR_SUCCESS){ 
       printf("Ordinateur %s non trouvé\n", NomPc); 
       error = 2; 
    }else { 
       Valeur = GetValueData(hkKey,"SOFTWARE\\Microsoft\\Internet Connection Wizard","InstallationDirectory");

       cout << Valeur << endl; 
    }//end if 
//------------------------------------------------------------- 
 //cree une cle et une valeur dans la base de registre 
   if (RegConnectRegistry(NomPc.c_str(),HKEY_LOCAL_MACHINE,&hkKey) != ERROR_SUCCESS){ 
       printf("Ordinateur %s non trouvé\n", NomPc); 
       error = 2; 
    }else { 
       if(CreateKey(hkKey,"Software\\Folder1","MyKey","MyValue")== ERROR_SUCCESS) 
         cout << "création réussie" << endl; 
        else 
          cout << "Problème de création!" << endl; 
       //end if 
   }//end if 
//------------------------------------------------------------- 
 //cree une cle et une valeur dans la base de registre 
   if (RegConnectRegistry(NomPc.c_str(),HKEY_LOCAL_MACHINE,&hkKey) != ERROR_SUCCESS){ 
       printf("Ordinateur %s non trouvé\n", NomPc); 
       error = 2; 
    }else { 
       if(DeleteKey(hkKey,"Software\\Folder1")== ERROR_SUCCESS) 
         cout << "Effacement réussie" << endl; 
        else 
          cout << "Problème de la suppression!" << endl; 
       //end if 
   }//end if 
//------------------------------------------------------------- 
    return error; 
  }//end programme 
  
//------------------------------------------------------------------------------ 
// END PROGRAM 
//------------------------------------------------------------------------------- 
  



 Historique

02 juin 2006 08:47:11 :
prob texte
02 juin 2006 20:15:20 :
Modif faites suivant les remarques données par excrt saut pour la libération de la mémoire sur delete [] lpData ou je n'ai plus aucune valeur de retour ??? merci pour les remarques.
03 juin 2006 20:36:58 :
Changement de certaim pointeur char* en string tests sur la fonction GetValueData avec différentes recherches ok

 Sources du même auteur

RÉCUPÉRATION DES DATES D'UN FICHIER EN CLAIR
GESTION DES SERVICES WINDOWS PAR LES API DANS UNE CLASSE
Source avec Zip CRÉATION D'UNE CLASSE CL_STRING (GESTION DES CHAÎNES)
GESTION D'UN ARBRE BINAIRE PAR LES CLASSES
GESTION D'UNE FILE PAR LES CLASSES

 Sources de la même categorie

Source avec Zip WIN32 TLS LENT par dguilmain
Source avec Zip VIDER ELEMENTS DE CORBEILLE WINDOWS7 (WIN64) par BruNews
Source avec Zip Source avec une capture FIND TEXT (WIN64) par BruNews
Source avec Zip DELETE DIRECTORY (WIN64) par BruNews
Source avec Zip ENUM DIRECTORY (WIN64) par BruNews

 Sources en rapport avec celle ci

Source avec Zip VIDER ELEMENTS DE CORBEILLE WINDOWS7 (WIN64) par BruNews
Source avec Zip Source avec une capture FIND TEXT (WIN64) par BruNews
Source avec Zip DELETE DIRECTORY (WIN64) par BruNews
Source avec Zip ENUM DIRECTORY (WIN64) par BruNews
Source avec Zip Source avec une capture REGISTRY GUARD BETA par Taron31

Commentaires et avis

Commentaire de vecchio56 le 02/06/2006 11:16:50 administrateur CS

Je pensais pas qu'on pouvait déposer des ébauches par inadvertance

Commentaire de vecchio56 le 02/06/2006 11:22:20 administrateur CS

Tu es sur qu'il ne manque rien? Parce que la j'ai pas compris l'intérêt de ton code

Commentaire de UKR6900 le 02/06/2006 12:13:33

Dans un code source ,il manque toujour quelque chose
c'est ça enrichir un code au fur et mesure des besoins.
Mais celui-ci est une base importante pour une programmation
système des base de registre.(Contrôle des paramétrages Anti-virus, création des
clé pour contrôle des logs etc...)
Ce sont les fonctions qui sont importantes,pas le code qui donne un exemple d'utilisation des fonctions.
Et celui qui comprend pas l'intérêt de ce code, c'est qu'il ne travaille pas dans le bon domaine de programmation et voilà....
Moi dans le temps, j'aurai été content de trouver des exemples comme celui-ci.
A bon entendeur, A+

Commentaire de excrt le 02/06/2006 16:57:02

« Rem:Compilation avec Borland C++ 5.5 (pas d'erreur de compil).  »

une compilation sans erreur ne veut strictement _rien_ dire ...
tu peux très bien avoir « 0 error(s), 0 warning(s) » lors de la compilation
et obtenir un soft _complètement_ disfonctionnel!

Commentaire de excrt le 02/06/2006 17:03:43

en passant:
« cout << GetValueData(hkKey,"SOFTWARE\\Microsoft\\DirectX","Version") << endl; »

ton GetValueData() retourne un pointeur sur un char* que tu as alloué
récupère la valeur de GetValueData() et _ensuite_, affiche la

char* ptr = GetValueData( ... );
cout << ptr << endl;
delete [] ptr;

sinon tu vas avoir des fuites de mémoire _partout_ !

dans ton GetValueData(), petit truc:

// ...
char * rValue = new char[cstMaxRegLength];
rValue[0] = '\0'; // place ca ici(valeur par défaut, si on veut), comme ca tu sauve beaucoup de « else/default/... »
// ..

la répétition de code c'est pas très bon ...

Commentaire de excrt le 02/06/2006 17:06:25

dernière petite chose pour aujourd'hui
dans « GetValueData() » tu as oublié de libérer la mémoire alloué pour lpData

« delete [] lpData; » avant de quitter la fonction(GetValueData)

Commentaire de excrt le 04/06/2006 16:50:56

#include <windows.h> // ...
#include <iostream> // std::cout
#include <string> // std::string
#include <sstream> // std::stringstream

// PCSTR >> const char*
std::string GetValueData(HKEY hkTopKey, PCSTR pSubKey, PCSTR pValueName)
{
    HKEY hkKey;
    DWORD dwType;
    DWORD dwDataSize = cstMaxRegLength;
    BYTE* pData;
    std::string strBuffer;
    std::stringstream strStream;

    if (RegOpenKeyExA(hkTopKey, pSubKey, 0, KEY_READ, &hkKey) == ERROR_SUCCESS)
    {
        pData = new BYTE[cstMaxRegLength + 1];

        if (RegQueryValueExA(hkKey, pValueName, NULL, &dwType, pData, &dwDataSize) == ERROR_SUCCESS)
        {
            switch (dwType)
            {
                case REG_BINARY:
                    strStream << (UINT)pData[0] << (CHAR)'.' <<\
                                 (UINT)pData[1] << (CHAR)'.' <<\
                                 (UINT)pData[2] << (CHAR)'.' <<\
                                 (UINT)pData[3];
                    break;

                case REG_DWORD:
                    strStream << *(DWORD*)pData;
                    break;

                default: dwDataSize = 0;
                    // !break

                case REG_EXPAND_SZ:
                case REG_MULTI_SZ:
                case REG_SZ:
                    pData[dwDataSize] = '\0'; // simple précaution
                    strStream << (PCSTR)pData;
                    break;
            }
            strBuffer = strStream.str();
        }
        delete [] pData; // libère la mémoire
        RegCloseKey(hkKey);
    }
    return strBuffer;
}

int main()
{
    std::string retval = GetValueData(..., ..., ...);

    std::cout << retval << std::endl;
    return 0;
}

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Registre ou API windows [ par Will ] Je souhaite recuperer les infos d'un pc (c a d la carte reseau, la carte son, le type de clavier etc...).Que dois-je utiliser, la base de registe wind API capte l'écran [ par Bin Laden ] Salut, Je cherche une fonction API qui capte le contenu de l'écran. QU'EST-CE QU'UNE API ? [ par ronan ] Je suis débutant et j'aimerais bien avoir une définition d'une Api. J'en entends beaucoup parler mais je sais pas trop ce que sais.Merci. API qui recupere son propre path [ par NetCommando ] je veux savoir comment une API recupere son prapre pathdu genre c:\app.exe , pour une aplication nomé "app"merci base de registre [ par ciberfred ] C quoi les fonctions pour creer/ecrire/supprimerqqch dans la base de registre.genre je veus que dans la base de registre au 1erlancement de mon apli j Lire dans la base de registre en C++ [ par chris ] BonjourJe recherche un petit programme C++ qui me permette de lire dans la base de registre.Merci pour votre aide. API pour visualiser des pages HTML???????? [ par Tropdemalaveclesapi ] QQN connait une api pour afficher à l'écran une page HTML? merci à tous de réfléchir à la question! UTILISATIONS D'API [ par DEL ] comment utiliser les api findwindow, findwindowex et sendmessage en C ?merci d'avance =) ++DEL base de registre [ par skysee ] bonjour,je voulais savoir si qqun avait une liste de clé de la base de registre ou un site ou il 'yen a beaucoup de répertoriées.merci plusieurs dialog [API] [ par Xs ] voila, je faisait un prog, et pis tout d'un coup, j'ai eu envie de changer son design, qui été deja sous API WIN32.ce design consiste a avoir une dial


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,841 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales