Как установить значение в реестре Windows? (C ++) - PullRequest
4 голосов
/ 26 января 2010

Я хочу изменить ключ "HKEY_LOCAL_MACHINE \ Software \ название компании \ название игры \ настройки \ значение" на "1" (DWORD)

Это мой код:

HKEY hkey;
 DWORD dwDisposition;
 if(RegCreateKeyEx(HKEY_LOCAL_MACHINE, TEXT("Software\\company name\\game name\\settings"), 0, NULL, 0, 0, NULL, &hkey, &dwDisposition) == ERROR_SUCCESS){
  DWORD dwType, dwSize;
  dwType = REG_DWORD;
  dwSize = sizeof(DWORD);
  DWORD rofl = 1;
  RegSetValueEx(hkey, TEXT("value"), 0, dwType, (PBYTE)&rofl, dwSize); // does not create anything
  RegCloseKey(hkey);
 }

Но это ничего не делает. RegCreateKeyEx () - единственная функция, которая действительно что-то делает: создает «папки» только в реестре. Итак, еще раз, как я терплю неудачу? Как я могу создавать «файлы» в реестре?

Ответы [ 3 ]

10 голосов
/ 26 января 2010

Всегда проверять возвращаемое значение функций API. Вы увидите, что RegSetValueEx () возвращает 5, доступ запрещен. Вы не просили разрешения на запись. Исправлено:

  if(RegCreateKeyEx(HKEY_LOCAL_MACHINE, 
      TEXT("Software\\company name\\game name\\settings"), 
      0, NULL, 0, 
      KEY_WRITE, NULL, 
      &hkey, &dwDisposition) == ERROR_SUCCESS) {
    // etc..
  }
1 голос
/ 26 января 2010

Вам, вероятно, нужно передать KEY_WRITE в качестве значения arugment samDesired функции RegCreateKeyEx() (шестой аргумент).

0 голосов
/ 26 января 2010

Это копия и редактирование из фактического кода, может содержать ошибки.

LONG
SetRegValue
    (
        const wchar_t* path
        ,const wchar_t *name
        ,const wchar_t *value
    )
{
    LONG status;
    HKEY hKey;

    status = RegOpenKeyEx(HKEY_CURRENT_USER, path, 0, KEY_ALL_ACCESS, &hKey);
    if ( (status == ERROR_SUCCESS) && (hKey != NULL))
    {
        status = RegSetValueEx( hKey, name, 0, REG_SZ, (BYTE*)value, ((DWORD)wcslen(value) + 1)*sizeof(wchar_t));
        RegCloseKey(hKey);
    }
    return status;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...