Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Lettura di un valore DWORD del registro di Windows
Forum - C/C++ - Lettura di un valore DWORD del registro di Windows

Avatar
jerry74 (Normal User)
Newbie


Messaggi: 15
Iscritto: 01/02/2009

Segnala al moderatore
Postato alle 22:15
Mercoledì, 29/09/2010
Salve a tutti, premetto che non sono un esperto di c++, anzi per me è la prima volta che mi cimento nella realizzazione di un progamma in c++. Veniamo al dunque: devo leggere delle chiavi di registro ed utilizzo il seguente codice:
Codice sorgente - presumibilmente C++

  1. HKEY hKey;
  2.         DWORD dwType;
  3.         DWORD dwSize;// = sizeof(DWORD);
  4.         LPWSTR pDescrOut = NULL;
  5.         char *pKeyDir = new char[0xFF];
  6.         char *pKeyName = new char[0xFF];
  7.         char* Data[200];
  8.        
  9.         int ret = RegOpenKeyEx(HKEY_LOCAL_MACHINE, CheckFramework::Get_Chiave(), 0, KEY_QUERY_VALUE, &hKey);
  10.         if(ret == ERROR_SUCCESS)
  11.         {
  12.             ret = RegQueryValueEx(hKey, CheckFramework::Get_Nome(), NULL, &dwType,(LPBYTE)&Data, &dwSize);
  13.             if(ret == ERROR_SUCCESS)
  14.             {
  15.                     cout << "hkey: " << hKey << endl;
  16.                     cout << "chiave: " << CheckFramework::Get_Chiave() << endl;
  17.                     cout << "ret: " << ret << endl;
  18.                     cout << "descrizione: " << CheckFramework::Get_Descrizione() << endl;
  19.                     cout << "Data: " << Data << endl;
  20.                     cout << "Valore: " << CheckFramework::Get_Valore() << endl;
  21.             }



Il valore che mi stampa Data è un numero di otto cifre simile a questo: 002DF940 che varia di volta in volta. Suppongo possa trattarsi dell'indirizzo di memoria in cui è memorizzato il valore che cerco ma non ne sono sicuro e non saprei neanche come fare a ricavare il valore in esso presente.
Il valore che deve restituire, verificato nel regitro di sistema e rispettivamente 0 (0x00000000) oppure 1 (0x00000001).
Questo problema si presenta solo se interrogo chiavi di tipo REG_DWORD mentre con le chiavi REG_SZ il risultato visualizzato è corretto.

PM
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6230
Iscritto: 04/12/2003

Up
0
Down
V
Segnala al moderatore
Postato alle 2:02
Venerdì, 01/10/2010


Il mio blog: https://piero.dev
PM
Avatar
jerry74 (Normal User)
Newbie


Messaggi: 15
Iscritto: 01/02/2009

Up
0
Down
V
Segnala al moderatore
Postato alle 22:30
Mercoledì, 06/10/2010
si, dwType l'ho settato a REG_DWORD ma nel frattempo mi sono accorto che il problema è un altro. Se utilizzo la seguente riga per visualizzare il valore presente nella chiave di registro:

Codice sorgente - presumibilmente Plain Text

  1. cout << "Data: " << (int)Data << endl;



viene visualizzato il valore corretto (in questo caso mi dà 1)


PM