Извлеките значение REG_MULTI_SZ из реестра и сохраните в строковом массиве c ++ - PullRequest
2 голосов
/ 13 июля 2011

Существует значение REG_MULTI_SZ, которое я хотел бы вставить в массив строк, чтобы моя программа могла делать с ними другие вещи. Я никогда не использовал C ++ для доступа к реестру, поэтому я немного растерялся после следующих примеров. Я использую VS10.

Есть ли простой способ сделать это? Благодарю.

1 Ответ

5 голосов
/ 14 июля 2011

Сначала: запустите RegQueryValueEx, чтобы получить тип и необходимый объем памяти:

Однобайтовый код:

DWORD type, size;
vector<string> target;
if ( RegQueryValueExA(
    your_key, // HKEY
    TEXT("ValueName"),
    NULL,
    &type,
    NULL,
    &size ) != ERROR_SUCCESS )
  return;
if ( type == REG_MULTI_SZ )
{
  vector<char> temp(size);

  if ( RegQueryValueExA(
      your_key, // HKEY
      TEXT("ValueName"),
      NULL,
      NULL,
      reinterpret_cast<LPBYTE>(&temp[0]),
      &size ) != ERROR_SUCCESS )
  return;

  size_t index = 0;
  size_t len = strlen( &temp[0] );
  while ( len > 0 )
  {
    target.push_back(&temp[index]);
    index += len + 1;
    len = strlen( &temp[index] );
  }
}

Юникод:

DWORD type, size;
vector<wstring> target;
if ( RegQueryValueExW(
    your_key, // HKEY
    TEXT("ValueName"),
    NULL,
    &type,
    NULL,
    &size ) != ERROR_SUCCESS )
  return;
if ( type == REG_MULTI_SZ )
{
  vector<wchar_t> temp(size/sizeof(wchar_t));

  if ( RegQueryValueExW(
      your_key, // HKEY
      TEXT("ValueName"),
      NULL,
      NULL,
      reinterpret_cast<LPBYTE>(&temp[0]),
      &size ) != ERROR_SUCCESS )
  return;

  size_t index = 0;
  size_t len = wcslen( &temp[0] );
  while ( len > 0 )
  {
    target.push_back(&temp[index]);
    index += len + 1;
    len = wcslen( &temp[index] );
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...