Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - [Risolto] Come fare a Leggere una chiave di registro con API?
Forum - C/C++ - [Risolto] Come fare a Leggere una chiave di registro con API?

Avatar
Saf (Normal User)
Newbie


Messaggi: 13
Iscritto: 13/07/2010

Segnala al moderatore
Postato alle 22:02
Martedì, 22/02/2011
Ho creato una chiave chiamata "Prova SAF" nel registro all'interno di HKEY_CURRENT_USER per testare l'efficacia della funzione RegQueryValueEx().
Il risultato è che legge la chiave, di preciso legge il tipo e la dimensione e li salva come dovrebbe in type e count, ma il contenuto vero e proprio no(tant'è che mi da il messaggio di errore!!!).
In output non mi da quello che ho scritto nella chiave...
Sostanzialmente il valore iniziale della variabile value non cambia..
___________________________________________________
Risolto: la variabile count è la lunghezza del buffer, ma è un valore che la funzione legge in ingresso e poi restituisce in output, pertanto prima assegnavo il buffer lungo 0 byte è quindi non ci stava il contenuto in value, aumentando il valore iniziale riesco a leggere tutto il contenuto!!!
Ho risolto processando il tipo di errore. Mi sono accorto che dava "Error_more_data"!!

Codice del programma di prova:
Codice sorgente - presumibilmente C++

  1. #include <windows.h>
  2. #include <winreg.h>
  3. #include <stdio.h>
  4.  
  5. char value[255]="iniziale";
  6. DWORD count=99;//dimensione in byte dedicata al buffer
  7. DWORD type=0;
  8. DWORD dwRet;
  9.  
  10. int main(){
  11.   printf("Inizializzazione\n");
  12.   printf("________________________\nValori prima del RegQuery\nValue:%s\nSize key:%d\nType key:%d\n________________________\n",value,count,type);
  13.   dwRet=RegQueryValueEx(HKEY_CURRENT_USER,
  14.                      TEXT("Prova SAF"),
  15.                      0,
  16.                      &type,
  17.                     (LPBYTE)&value,
  18.                      &count);
  19.   if(dwRet==ERROR_SUCCESS){
  20.     //no errori
  21.     printf("%s\n\n",value);
  22.   }
  23.   else if(dwRet==ERROR_MORE_DATA){
  24.     printf("Errore buffer corto\n\n");
  25.   }
  26.   else if(dwRet==ERROR_FILE_NOT_FOUND){
  27.     printf("Errore CHIAVE NON TROVATA\n\n");
  28.   }
  29.   else {
  30.     //errore generico
  31.     printf("Errore\nValue:%s\nSize key:%d\nType key:%d\n\n",value,count,type);
  32.   }
  33.   system("pause");
  34. }


Ultima modifica effettuata da Saf il 23/02/2011 alle 21:43
PM
Avatar
HeDo (Founder Member)
Guru^2


Messaggi: 2763
Iscritto: 21/09/2007

Up
1
Down
V
Segnala al moderatore
Postato alle 22:13
Martedì, 22/02/2011

si grazie avevo gia dato un occhio in msdn, tuttavia non capisco che tipo di variabile sia PHKEY, in teoria dovrebbe essere un handle no? pertanto non capisco casa faccia la funzione RegOpenKeyEx, apre la chiave ok, ma come faccio a leggerne il contenuto? - Saf - 22/02/11 23:15


Ingegnere Informatico
https://ldlagency.it
PM