Accueil > > > 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
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
Sources de la même categorie
Commentaires et avis
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
|
Derniers Blogs
[FRAMEWORK 4] LES TASKS ET LE THREAD UI[FRAMEWORK 4] LES TASKS ET LE THREAD UI par fathi
Je viens de passer quelques temps au TechDay's et j'ai pu voir pas mal de session intéressante. Par contre une chose m'a un peu étonné lors de certaines de ces sessions qui abordaient les améliorations du framework .NET (donc le 4.5) : en gros, bea...
Cliquez pour lire la suite de l'article par fathi WORKFLOW FOUNDATION 3 A UN PIED DANS LA TOMBEWORKFLOW FOUNDATION 3 A UN PIED DANS LA TOMBE par JeremyJeanson
Depuis déjà un an, je conseille vivement les utilisateurs de Workflow Foundation 3 à migrer vers la version 4. L'information qui va suivre ne devrait donc pas trop prendre au dépourvu les personnes qui m'ont suivi. Je profite de ce poste, pour faire le re...
Cliquez pour lire la suite de l'article par JeremyJeanson TECHDAYS PARIS 2012 : NOUVELLES TENDANCES DU POSTE DE TRAVAIL - BRING YOUR OWN PCTECHDAYS PARIS 2012 : NOUVELLES TENDANCES DU POSTE DE TRAVAIL - BRING YOUR OWN PC par ROMELARD Fabrice
Speakers: Thierry Rapatout, Antoine Petit et Xavier Trebbia Cette session entre dans le cadre des RDV Décideurs des TechDays 2012, elle est liée à la consumérisation de l'IT et la mise en place du "DeskTop as a Service" dans de plus en ...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice TECHDAYS PARIS 2012 : SYSTEM CENTER SERVICE MANAGER 2012 VUE D'ENSEMBLETECHDAYS PARIS 2012 : SYSTEM CENTER SERVICE MANAGER 2012 VUE D'ENSEMBLE par ROMELARD Fabrice
Speakers: Julien Marechal, Gautier Confiant, Sébastien MEYER La session débute par le positionnement de la solution System Center par rapport aux concepts d'organisation ITIL. Le portail du catalogue de se...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice TECHDAYS PARIS 2012 : PLEINIèRE SECOND JOURTECHDAYS PARIS 2012 : PLEINIèRE SECOND JOUR par ROMELARD Fabrice
Après une première journée dédiée aux développeurs, cette seconde journée est dédiée au monde des entreprises et de ses applications. Ainsi, cette pleinière est dédiée à faire un 360 de l'évolution des applications Business aux demandes ac...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Logiciels
Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning COLLECTOR PLUS (3.00B)COLLECTOR PLUS (3.00B)COLLECTOR PLUS version 3.00B est un logiciel utilisant une base de données alimentée par :
- L... Cliquez pour télécharger COLLECTOR PLUS PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO LettresFaciles 2011 (8.0.0.1)LETTRESFACILES 2011 (8.0.0.1)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles 2011
|