Oppure

Loading
29/09/10 20:15
jerry74
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:
        HKEY hKey;
        DWORD dwType;
        DWORD dwSize;// = sizeof(DWORD);
        LPWSTR pDescrOut = NULL;
        char *pKeyDir = new char[0xFF]; 
        char *pKeyName = new char[0xFF];
        char* Data[200];
        
        int ret = RegOpenKeyEx(HKEY_LOCAL_MACHINE, CheckFramework::Get_Chiave(), 0, KEY_QUERY_VALUE, &hKey);
        if(ret == ERROR_SUCCESS)
        {
            ret = RegQueryValueEx(hKey, CheckFramework::Get_Nome(), NULL, &dwType,(LPBYTE)&Data, &dwSize);
            if(ret == ERROR_SUCCESS)
            {
                    cout << "hkey: " << hKey << endl;
                    cout << "chiave: " << CheckFramework::Get_Chiave() << endl;
                    cout << "ret: " << ret << endl;
                    cout << "descrizione: " << CheckFramework::Get_Descrizione() << endl;
                    cout << "Data: " << Data << endl;
                    cout << "Valore: " << CheckFramework::Get_Valore() << endl;
            }


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.
aaa
01/10/10 0:02
pierotofy
dwType dev'essere settato a REG_DWORD.

msdn.microsoft.com/en-us/library/…
Il mio blog: piero.dev
06/10/10 20:30
jerry74
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:

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


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

aaa