如何在Windows注册表中设置一个值?(C++)

5

我希望编辑“HKEY_LOCAL_MACHINE\Software\company name\game name\settings\value”这个键的值为“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个回答

11

始终检查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

你可能需要将KEY_WRITE作为RegCreateKeyEx()函数(第六个参数)的samDesired参数的值传入。


0

这是从实际代码复制并编辑的,可能包含错误。

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;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接