Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    [C] verificare i valori delle chiavi specificate

    Ciao a tutti. Mi stò cimentando ad utilizzare le API di Windows per accedere al registro di configurazione.

    Vorrei controllare tutti i valori delle chiavi presenti in un dato percorso del registro, alla ricerca di una stringa che specifico io.

    Ad esempio:
    nella chiave HKEY_CLASSES_ROOT\Directory\shell
    voglio controllare tutti i valori delle sottochiavi presenti, alla ricerca di una stringa X.

    Come posso fare?

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Dato che hai indicato le funzioni per la gestione del registro

    http://msdn2.microsoft.com/en-us/library/ms724875.aspx

    prova a cercare la RegEnumKeyEx e la RegEnumValue ...

  3. #3
    si le avevo viste. ma non sapevo come prendere i nomi delle sottochiavi presenti.

    comunque stò guardando questo esempio:
    http://msdn2.microsoft.com/en-us/library/ms724256.aspx

    Se ho dubbi o mi blocco, chiedo fra poco


  4. #4
    mi dispiace ma non riesco.
    allora...

    Mi sono creato la seguente funzione, che richiamo passando correttamente la chiave in cui andrà a operare:
    codice:
    void KeyCheck(HKEY hKey) {
         TCHAR    achKey[MAX_KEY_LENGTH];   // buffer for subkey name
         DWORD    cbName;                   // size of name string 
         TCHAR    achClass[MAX_PATH] = TEXT("");  // buffer for class name 
         DWORD    cchClassName = MAX_PATH;  // size of class string 
         DWORD    cSubKeys=0;               // number of subkeys 
         DWORD    cbMaxSubKey;              // longest subkey size 
         DWORD    cchMaxClass;              // longest class string 
         DWORD    cValues;              // number of values for key 
         DWORD    cchMaxValue;          // longest value name 
         DWORD    cbMaxValueData;       // longest value data 
         DWORD    cbSecurityDescriptor; // size of security descriptor 
         FILETIME ftLastWriteTime;      // last write time 
         
         DWORD i, retCode;
         TCHAR  achValue[MAX_VALUE_NAME]; 
         DWORD cchValue = MAX_VALUE_NAME;
         
         // Ottengo informazioni sulla chiave specificata
         retCode = RegQueryInfoKey(
            hKey,                    // key handle 
            achClass,                // buffer for class name 
            &cchClassName,           // size of class string 
            NULL,                    // reserved 
            &cSubKeys,               // number of subkeys 
            &cbMaxSubKey,            // longest subkey size 
            &cchMaxClass,            // longest class string 
            &cValues,                // number of values for this key 
            &cchMaxValue,            // longest value name 
            &cbMaxValueData,         // longest value data 
            &cbSecurityDescriptor,   // security descriptor 
            &ftLastWriteTime);       // last write time
            
         if (cSubKeys)
         {
            printf( "\nNumber of subkeys: %d\n", cSubKeys);
    
            for (i=0; i<cSubKeys; i++) 
            { 
                cbName = MAX_KEY_LENGTH;
                retCode = RegEnumKeyEx(hKey, i,
                         achKey, 
                         &cbName, 
                         NULL, 
                         NULL, 
                         NULL, 
                         &ftLastWriteTime); 
                if (retCode == ERROR_SUCCESS) 
                {
                    printf("(%d) %s\n", i+1, achKey);
                }
            }/* for i */
         } /* if */
        
         
         // Conteggio del numero di valori della chiave specificata
         if (cValues) {
            printf( "\nNumber of values: %d\n", cValues);
    
            for (i=0, retCode=ERROR_SUCCESS; i<cValues; i++) 
            { 
                cchValue = MAX_VALUE_NAME; 
                achValue[0] = '\0'; 
                retCode = RegEnumValue(hKey, i, 
                    achValue, 
                    &cchValue, 
                    NULL, 
                    NULL,
                    NULL,
                    NULL);
                    
                if (retCode == ERROR_SUCCESS ) 
                { 
                    printf("(%d) %s\n", i+1, achValue); 
                } 
            }
         }
            
    }/* KeyCheck */
    La funzione stampa correttamente tutte le sottochiavi di hKey (il valore che riceve la funzione). Ma si ferma lì. Io vorrei che andasse anche a "prelevare" le sottochiavi ad un livello ancora più basso.

    Es: io passo alla funzione la chiave HKEY_CLASSES_ROOT\Directory\shell e lei mi stampa ad esempio:
    Numero sottochiavi: 2
    (1) Nome1
    (2) Nome2
    Dentro a Nome1 però esiste un'altra sottochiave, e vorrei che mi stampasse anche quella in forma di albero.
    (1) Nome1
    (1.1) SubNome1
    (2) Nome2
    Inoltre il 2° if, mi stampa i nomi dei valori, ma non il contenuto del campo Dati valore.
    Ho provato ad utilizzare RegGetValue, ma non sò come usarla.

  5. #5
    up. Se mi sono spiegato male, ditemelo

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.