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

MFC Discussion :

[Win32 API] Récuperer une string dans la base de registre


Sujet :

MFC

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 52
    Points : 40
    Points
    40
    Par défaut [Win32 API] Récuperer une string dans la base de registre
    Bonjour,

    Je n'arrive pas à récupérer une string dans la base de registre pourtant j'arrive bien à l'écrire dans cette dernière.Tout ce passe bien pour l'écriture(je vérifie bien au niveau de l'éditeur de la base de registre que la string est bien stockée) par contre pour la lecture, le AfxMessageBox (Region not recovered) est affiché.

    Voici les portions de code pour l'écriture et la lecture:

    Ecriture:

    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
     
     
    HKEY	hRegKey;
    WCHAR	wcKeyName[_MAX_PATH];
    DWORD	dwDisp;
    DWORD	dwRegVal;  	
    LPCTSTR	pcszRegion;
     
    wcscpy(wcKeyName,TN_GPS_INIT_REGISTRY_PATH);
     
    // Open the registry record, if exists
    if ( RegOpenKeyEx( HKEY_LOCAL_MACHINE, wcKeyName, 0, 0, &hRegKey ) != ERROR_SUCCESS )
    {    
           // Registry entry not found, so create a new one.
          // Create Registry record
          if ( RegCreateKeyEx(HKEY_LOCAL_MACHINE, wcKeyName, 0, NULL, 0, 0, NULL, &hRegKey, &dwDisp ) != ERROR_SUCCESS )
          {
                 // Error, could not open or create registry key
    	;
                 return 0;
           }
    }
     
    // Now create the subkeys
     
    //Region
    pcszRegion = m_region;
    if (RegSetValueEx(hRegKey,_T("Region"), NULL, REG_SZ, (PBYTE)pcszRegion, (_tcslen(pcszRegion) + 1) * sizeof(TCHAR)) != ERROR_SUCCESS)
    {
             ; // could not save key
             AfxMessageBox(_T("Region Not Written"));
    }
    Pour la lecture:
    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
     
     
    HKEY	hRegKey;
    WCHAR	wcKeyName[_MAX_PATH];
    DWORD	dwCount,dwType;
    BOOL	bRegAvail = TRUE;
     
    DWORD    dwDataSize = 0;
    CString strValue; 
     
    // Temp vars to hold values read from registry. Set them to default values first.
    DWORD	dwRegVal;
     
    // if the registry entry and data are already there, read them in
    // else, create one with default data
    wcscpy(wcKeyName,TN_GPS_INIT_REGISTRY_PATH);
     
    if ( RegOpenKeyEx(HKEY_LOCAL_MACHINE, wcKeyName, 0, 0, &hRegKey) == ERROR_SUCCESS)
    {
     
                   // Get string region
                    dwCount = sizeof(DWORD);
                    dwType = REG_SZ;
                    if ( RegQueryValueEx( hRegKey, _T("Region"), NULL, &dwType,  (PBYTE)(LPTSTR)strValue.GetBuffer(dwDataSize + 1), &dwDataSize ) == ERROR_SUCCESS) 
    	               {
    	                           strValue.ReleaseBuffer(); 
    		           m_region = (CString)strValue;
    	                }
    	                else
    	                {
    		          AfxMessageBox(_T("Region not recovered"));
    		          strValue.ReleaseBuffer(); 
    	                }
    }

    Est ce que quelqu'un peut m'aider

  2. #2
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    salut,
    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
     
    HKEY   hRegKey;
    WCHAR   wcKeyName[_MAX_PATH];
    DWORD   dwCount,dwType;
    BOOL   bRegAvail = TRUE;
     
    DWORD    dwDataSize = 0;
    CString strValue;
     
    // Temp vars to hold values read from registry. Set them to default values first.
    DWORD   dwRegVal;
     
    // if the registry entry and data are already there, read them in
    // else, create one with default data
    wcscpy(wcKeyName,TN_GPS_INIT_REGISTRY_PATH);
     
    if ( RegOpenKeyEx(HKEY_LOCAL_MACHINE, wcKeyName, 0, 0, &hRegKey) == ERROR_SUCCESS)
    {
     
                   // Get string region
                    dwCount = sizeof(DWORD);
                    dwType = REG_SZ;
    char szString[255];
    dwDataSize=sizeof(szString);
     
                    if ( RegQueryValueEx( hRegKey, _T("Region"), NULL, &dwType, (LPBYTE)szString, &dwDataSize ) == ERROR_SUCCESS)
                      {                            
                           m_region = CString(szString,dwDataSize);
                       }
                       else
                       {
                    AfxMessageBox(_T("Region not recovered"));      
                       }
    }
    lpcbData doit contenir la longueur maxi de la zone de chute ,en retour elle contient la taille réelle copiée.


  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 52
    Points : 40
    Points
    40
    Par défaut
    Merci mais j'ai concocté deux méthodes que voici pour stocker et récupérer une string. je laisse le code si quelqu'un d'autre veux le réutiliser.
    Je suis devenue une pro de la base de registre maintenant avec le temps que j'ai passé dessus....


    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
     
     
    LPTSTR CGPSInitializationData::GetRegistryString(
    	LPCTSTR p_SubKey,
    	LPCTSTR p_ValueName,
    	LPTSTR p_DefaultResult,
    	LPTSTR p_Buffer)
    {
    	HKEY l_hKey = NULL;
    	DWORD l_dwType = 0;
    	LONG l_Result = 0;
    	DWORD l_Disposition = 0;
    	TCHAR l_LocalBuffer[256] = {0};
    	DWORD l_dwSize = sizeof(l_LocalBuffer);
     
    	_tcscpy(p_Buffer, p_DefaultResult);
    	if ( ::RegCreateKeyEx(HKEY_LOCAL_MACHINE, p_SubKey, 0, NULL,
    						 0, 0, NULL, &l_hKey, &l_Disposition) == ERROR_SUCCESS )
    	{
    		l_Result = ::RegQueryValueEx(l_hKey, p_ValueName, NULL, &l_dwType, (BYTE*)l_LocalBuffer, &l_dwSize);
    		RegCloseKey(l_hKey);
    		if (l_Result == ERROR_SUCCESS)
    			_tcscpy(p_Buffer, l_LocalBuffer);
    	}
    	return p_Buffer;
    }
     
    bool CGPSInitializationData::WriteRegistryString(
    	LPCTSTR p_SubKey,
    	LPCTSTR p_ValueName,
    	LPCTSTR p_Data)
    {
    	HKEY l_hKey = NULL;
    	LONG l_Result = 0;
    	DWORD l_Disposition = 0;
     
    	DWORD l_dwType = REG_SZ;
    	DWORD l_dwSize = (DWORD)(_tcslen(p_Data) + 1) * sizeof(TCHAR);
     
    	if (::RegCreateKeyEx(HKEY_LOCAL_MACHINE, p_SubKey, 0, NULL,
    						 0, 0, NULL, &l_hKey, &l_Disposition) == ERROR_SUCCESS )
    	{
    		l_Result = ::RegSetValueEx(l_hKey, p_ValueName, NULL, l_dwType, (BYTE*)p_Data, l_dwSize);
    		RegCloseKey(l_hKey);
    		return (l_Result == ERROR_SUCCESS);
    	}
    	return false;
    }

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

Discussions similaires

  1. Récuperer une string dans un jtextfield et l'utiliser
    Par aurelie689 dans le forum Débuter
    Réponses: 12
    Dernier message: 01/05/2009, 15h52
  2. envoyer une string dans la base sql server
    Par tortuegenie dans le forum ASP.NET
    Réponses: 2
    Dernier message: 23/04/2008, 09h38
  3. Chercher une valeur dans la base de registre
    Par Sallie dans le forum MFC
    Réponses: 9
    Dernier message: 19/05/2006, 12h57
  4. Réponses: 4
    Dernier message: 30/01/2006, 19h50
  5. Lire une donnée dans la base de registre
    Par K.othmane dans le forum Langage
    Réponses: 1
    Dernier message: 06/01/2006, 11h32

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