Trouver une ressource (Nouvelle version du moteur, plus rapide & pertinent, essayez le !)
Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !
GESTION BASE DE REGISTRE (LOCAL OU DISTANTE)AVEC DES FONCTIONS API(NEW)
Information sur la source
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 de la même categorie
Commentaires
Discussions en rapport avec ce code source
|
CalendriCode
| | | L | M | M | J | V | S | D |
| | 1 | 2 | 3 | 4 | 5 | 6 |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 | 31 | | | |
|
Téléchargements
Logiciels à télécharger sur le même thème :
|