2009-07-14 5 views
2

У меня есть подраздел в моем реестре с неизвестными числами значений.Перечислить все значения из подраздела

Я хочу получить все данные из этих значений в указанном разделе.

как я могу это сделать? Я не знаю имена значений и количества значений.

Я программирую на C.

спасибо!

ответ

1

Вы хотите использовать Win32 API RegEnumValue для перечисления значений реестра из подраздела. В MSDN есть example, который аналогичен этому, но для перечисления разделов реестра.

Вы также можете найти некоторые вспомогательные функции из одного из моих предыдущих ответов here.

3

Вот код адресности всех строк значения а из данного RegKey (вы должны открыть этот ключ до и закрываются после использования этой функции.

vector<pair<wstring, wstring>> CRegistryManager::getKeyValues(HKEY regKey) 
{ 
    vector<pair<wstring, wstring>> retValues; 

    DWORD numOfValues; 
    DWORD maxValueNameLen; 
    DWORD maxValueDataLen; 
    LONG retCode; 

    retCode = RegQueryInfoKey(regKey, NULL, NULL,NULL, NULL, NULL, NULL, &numOfValues, &maxValueNameLen, &maxValueDataLen, NULL, NULL); 
    if((retCode == ERROR_SUCCESS) && (numOfValues != 0)) 
    { 
     TCHAR* valueName = new TCHAR[maxValueNameLen+1]; 

     TCHAR* valueData = new TCHAR[maxValueDataLen+1]; 

     for(int i = 0; i < numOfValues; i++) 
     { 
      DWORD valueNameBuferSize = maxValueNameLen+1; 
      DWORD valueDataBufferSize = maxValueDataLen+1; 

      retCode = RegEnumValue(regKey, i, valueName, &valueNameBuferSize, NULL,NULL, (LPBYTE)valueData, &valueDataBufferSize); 
      if(retCode == ERROR_SUCCESS) 
      { 
       auto pair = make_pair(wstring(valueName), wstring(valueData)); 
       retValues.push_back(pair); 
      } 
     } 
     delete[] valueName; 
     delete[] valueData; 
    } 
    return retValues; 
} 
Смежные вопросы