Перечислить ключи реестра

Discussion in 'WASM.BEGINNERS' started by Magnum, Feb 13, 2008.

  1. Magnum

    Magnum New Member

    Blog Posts:
    0
    Joined:
    Dec 29, 2007
    Messages:
    925
    Знаю, что нужно юзать

    RegOpenKeyEx
    RegEnumKeyEx
    RegQueryInfoKeyEx
    RegClose

    Подумал, может у кого валяется исходник для перечисления всех ключей, чтобы мне это не писать с нуля?
     
  2. LazzY

    LazzY New Member

    Blog Posts:
    0
    Joined:
    Mar 6, 2006
    Messages:
    123
    подпись курите свою)
    из мсдн
    Code (Text):
    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 _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. }
     
  3. censored

    censored New Member

    Blog Posts:
    0
    Joined:
    Jul 5, 2005
    Messages:
    1,615
    Location:
    деревня "Анонимные Прокси"
    Magnum
    в гугле валяется исходник
     
  4. Magnum

    Magnum New Member

    Blog Posts:
    0
    Joined:
    Dec 29, 2007
    Messages:
    925
    censored
    LazzY
    всем спс