遍歷註冊表某鍵下的所有子鍵及其KeyValue

  1. <a href="http://msdn.microsoft.com/zh-cn/site/ms724256">http://msdn.microsoft.com/zh-cn/site/ms724256</a>  
  1. // QueryKey - Enumerates the subkeys of key and its associated values.  
  2. //     hKey - Key whose subkeys and values are to be enumerated.  
  3.    
  4. #include <windows.h>  
  5. #include <stdio.h>  
  6. #include <tchar.h>  
  7.    
  8. #define MAX_KEY_LENGTH 255  
  9. #define MAX_VALUE_NAME 16383  
  10.    
  11. void QueryKey(HKEY hKey)   
  12. {   
  13.     TCHAR    achKey[MAX_KEY_LENGTH];   // buffer for subkey name  
  14.     DWORD    cbName;                   // size of name string   
  15.     TCHAR    achClass[MAX_PATH] = TEXT("");  // buffer for class name   
  16.     DWORD    cchClassName = MAX_PATH;  // size of class string   
  17.     DWORD    cSubKeys=0;               // number of subkeys   
  18.     DWORD    cbMaxSubKey;              // longest subkey size   
  19.     DWORD    cchMaxClass;              // longest class string   
  20.     DWORD    cValues;              // number of values for key   
  21.     DWORD    cchMaxValue;          // longest value name   
  22.     DWORD    cbMaxValueData;       // longest value data   
  23.     DWORD    cbSecurityDescriptor; // size of security descriptor   
  24.     FILETIME ftLastWriteTime;      // last write time   
  25.    
  26.     DWORD i, retCode;   
  27.    
  28.     TCHAR  achValue[MAX_VALUE_NAME];   
  29.     DWORD cchValue = MAX_VALUE_NAME;   
  30.    
  31.     // Get the class name and the value count.   
  32.     retCode = RegQueryInfoKey(  
  33.         hKey,                    // key handle   
  34.         achClass,                // buffer for class name   
  35.         &cchClassName,           // size of class string   
  36.         NULL,                    // reserved   
  37.         &cSubKeys,               // number of subkeys   
  38.         &cbMaxSubKey,            // longest subkey size   
  39.         &cchMaxClass,            // longest class string   
  40.         &cValues,                // number of values for this key   
  41.         &cchMaxValue,            // longest value name   
  42.         &cbMaxValueData,         // longest value data   
  43.         &cbSecurityDescriptor,   // security descriptor   
  44.         &ftLastWriteTime);       // last write time   
  45.    
  46.     // Enumerate the subkeys, until RegEnumKeyEx fails.  
  47.       
  48.     if (cSubKeys)  
  49.     {  
  50.         printf( "\nNumber of subkeys: %d\n", cSubKeys);  
  51.    
  52.         for (i=0; i<cSubKeys; i++)   
  53.         {   
  54.             cbName = MAX_KEY_LENGTH;  
  55.             retCode = RegEnumKeyEx(hKey, i,  
  56.                      achKey,   
  57.                      &cbName,   
  58.                      NULL,   
  59.                      NULL,   
  60.                      NULL,   
  61.                      &ftLastWriteTime);   
  62.             if (retCode == ERROR_SUCCESS)   
  63.             {  
  64.                 _tprintf(TEXT("(%d) %s\n"), i+1, achKey);  
  65.             }  
  66.         }  
  67.     }   
  68.    
  69.     // Enumerate the key values.   
  70.    
  71.     if (cValues)   
  72.     {  
  73.         printf( "\nNumber of values: %d\n", cValues);  
  74.    
  75.         for (i=0, retCode=ERROR_SUCCESS; i<cValues; i++)   
  76.         {   
  77.             cchValue = MAX_VALUE_NAME;   
  78.             achValue[0] = '\0';   
  79.             retCode = RegEnumValue(hKey, i,   
  80.                 achValue,   
  81.                 &cchValue,   
  82.                 NULL,   
  83.                 NULL,  
  84.                 NULL,  
  85.                 NULL);  
  86.    
  87.             if (retCode == ERROR_SUCCESS )   
  88.             {   
  89.                 _tprintf(TEXT("(%d) %s\n"), i+1, achValue);   
  90.             }   
  91.         }  
  92.     }  
  93. }  
  94.    
  95. void __cdecl _tmain(void)  
  96. {  
  97.    HKEY hTestKey;  
  98.    
  99.    if( RegOpenKeyEx( HKEY_CURRENT_USER,  
  100.         TEXT("SOFTWARE\\Microsoft"),  
  101.         0,  
  102.         KEY_READ,  
  103.         &hTestKey) == ERROR_SUCCESS  
  104.       )  
  105.    {  
  106.       QueryKey(hTestKey);  
  107.    }  
  108.      
  109.    RegCloseKey(hTestKey);  
  110. }  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章