IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Requêtes sur le registre


Sujet :

C

  1. #1
    Membre actif
    Inscrit en
    Mars 2007
    Messages
    68
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mars 2007
    Messages : 68
    Par défaut Requêtes sur le registre
    Bonjour,

    Je suis super novice et j'essaie de bricoler pour lire le registre. Je rencontre un problème lors de la lecture des valeurs dans le registre

    En fait, le résultat c'est qu'il me retourne environ 1 erreur toutes les 2 requêtes. L'erreur qu'il me retourne c'est un 0x2 (ce qui correspond à ERROR_FILE_NOT_FOUND dans le system error code) alors que la clé existe belle et bien.

    Voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    #include <windows.h>
    #include <stdio.h>
    #include <winreg.h>
     
    int main(){
     
    	int numeroSiteDansLeRegistre=0;
    	char cleRegistre[500] ="SOFTWARE\\Remote\\";
    	char cleRegistreTemp[500];
     
    	char tempIntNumeroSiteDansLeRegistre[500];
        DWORD returnRegistryOpen;
        DWORD returnRegistryQuery;
     
    	HKEY hKey;
    	char buffer[500];
    	DWORD size = sizeof(buffer)+1;
     
    	while(numeroSiteDansLeRegistre<=1000){//-------------------------------------------------------while
     
    		sprintf(tempIntNumeroSiteDansLeRegistre,"%d",numeroSiteDansLeRegistre);//------------------transformation du numero de int en char
     
    		strcpy (cleRegistreTemp,cleRegistre);//----------------------------------------------------on attribue la valeur de "cleRegistre" à "cleRegistreTemp"
    		strcat (cleRegistreTemp, tempIntNumeroSiteDansLeRegistre);//-------------------------------on append le numero a la clé de registre
    		strcat (cleRegistreTemp,"\\");//-----------------------------------------------------------on append le backslash pour finir la clé de registre
     
    		returnRegistryOpen = RegOpenKeyEx(HKEY_LOCAL_MACHINE,cleRegistreTemp,0,KEY_ALL_ACCESS,&hKey);
     
    		if(returnRegistryOpen==ERROR_SUCCESS){//---------------------------------------------------si le resultat à l'open sur le registre est OK
    			printf("%d", numeroSiteDansLeRegistre);//----------------------------------------------affichage du numéro
    			printf(" ---> ");
     
    			returnRegistryQuery=RegQueryValueEx(hKey,"NAME",NULL,NULL,buffer,&size);
     
    			if(returnRegistryQuery==ERROR_SUCCESS){//----------------------------------------------si le resultat à la requete sur le registre est OK
     
    				printf(buffer);
    				printf("\n");
     
    				buffer[0] = '\0';
     
    			}else{//-------------------------------------------------------------------------------si le resultat à la requete sur le registre est KO
    				char bufferError[500];
    				DWORD sizeBufferError = sizeof(bufferError);
     
    				printf("*ERROR* : 0x%x\n", GetLastError());
     
    				bufferError[0] = '\0';
     
    			}
    		}
    		RegCloseKey(hKey);//-----------------------------------------------------------------------On referme le registre
    		printf("\r");
    		numeroSiteDansLeRegistre++;
    	}
    	return 0;
    }
    Je ne vois pas mon erreur.

    Merci d'avance

  2. #2
    Membre Expert
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    1 186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 186
    Par défaut
    Bonjour,

    Il peut soit s'agir d'un problème de droit d'accès : si c'est pour une simple lecture de la clé, utiliser KEY_READ plutôt que KEY_ALL_ACCESS.

    Mais plus probablement, un problème d'encodage des chaînes de caractère.
    Vérifie le format par défaut des chaînes de caractère au niveau du compilateur (Unicode ou multi-Byte).

    - Adapte en fonction de l'encodage le type de tes chaînes de caractère. (wchar_t ou unsigned char)
    - Utilise RegQueryValueExA (pour chaîne Ansi) ou RegQueryValueExW (pour de l'Unicode).

  3. #3
    Membre chevronné
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2012
    Messages
    190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2012
    Messages : 190
    Par défaut
    salut !

    je ne peux pas tester tout de suite ton programme sur ma machine (je n'ai pas de clé "Remote"), mais il fonctionne avec d'autres clés.

    je ne vois pas ce qui cloche dans ton programme. quel est le format des données dans "Remote" pour que je puisse ajouter 2 sites bidons dans mon registre et regarder de plus près le problème ?

    A+

  4. #4
    Membre actif
    Inscrit en
    Mars 2007
    Messages
    68
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mars 2007
    Messages : 68
    Par défaut
    Bonjour,

    Bon en fait je viens de trouver. Ce que j'ai fait, c'est initialiser mes variables dans la boucle et non avant. Je ne vois pas trop pourquoi ça fonctionnait pas mais bon...

    Voici le code final
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    #include <windows.h>
    #include <stdio.h>
    #include <winreg.h>
    #include <stdlib.h>
     
    int main(){
    	int numeroSiteDansLeRegistre=0;
    	char cleRegistre[500] ="SOFTWARE\\Remote\\";
    	char cleRegistreTemp[500];
    	char tempIntNumeroSiteDansLeRegistre[500];
     
    	while(numeroSiteDansLeRegistre<=100){//-------------------------------------------------------while
     
    		sprintf(tempIntNumeroSiteDansLeRegistre,"%d",numeroSiteDansLeRegistre);//------------------transformation du numero de int en char
     
    		strcpy (cleRegistreTemp,cleRegistre);//----------------------------------------------------on attribue la valeur de "cleRegistre" à "cleRegistreTemp"
    		strcat (cleRegistreTemp, tempIntNumeroSiteDansLeRegistre);//-------------------------------on append le numero a la clé de registre
    		strcat (cleRegistreTemp,"\\");//-----------------------------------------------------------on append le backslash pour finir la clé de registre
     
    		DWORD returnRegistryOpen;
    		HKEY hKey;
    		returnRegistryOpen = RegOpenKeyEx(HKEY_LOCAL_MACHINE,cleRegistreTemp,0,KEY_READ,&hKey);
     
    		if(returnRegistryOpen==ERROR_SUCCESS){//----------------------------------------------------------------si Open OK
    			printf("%d", numeroSiteDansLeRegistre);//----------------------------------------------affichage du numéro
    			printf("-> ");
     
    			DWORD returnRegistryQuery;
    			char bufferName[500];
    			DWORD sizeName = sizeof(bufferName);
    			returnRegistryQuery=RegQueryValueExA(hKey,"NAME",NULL,NULL,bufferName,&sizeName);
     
    			if(returnRegistryQuery==ERROR_SUCCESS){
     
    				printf(bufferName);
    				printf("\n");
     
    				bufferName[0] = '\0';
    				bufferNet[0] = '\0';
     
    			}else{
    				printf("*ERROR* : 0x%x\n", GetLastError());
    			}
    		}
    		RegCloseKey(hKey);//-----------------------------------------------------------------------on referme le registre
     
    		cleRegistreTemp[0] = '\0';
     
    		numeroSiteDansLeRegistre++;//--------------------------------------------------------------incrémentation
    	}
    	return 0;
    }

  5. #5
    Membre chevronné
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2012
    Messages
    190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2012
    Messages : 190
    Par défaut
    ça ne m'avait pas sauté aux yeux !

    A+

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [ADO] Requète sur dates
    Par cdlr27 dans le forum Bases de données
    Réponses: 3
    Dernier message: 26/01/2005, 22h39
  2. Requête sur un MemData
    Par claude dans le forum Bases de données
    Réponses: 5
    Dernier message: 23/12/2004, 10h11
  3. Requête sur date
    Par guenfood dans le forum Access
    Réponses: 11
    Dernier message: 08/12/2004, 16h11
  4. Requête sur un serveur lié
    Par Guizz dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 06/08/2003, 11h35
  5. requête sur l'année d'une date
    Par jo77 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 30/07/2003, 09h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo