在GCC / C ++下访问Windows注册表

时间:2011-03-26 00:42:13

标签: c++ windows gcc registry mingw

我正在尝试使用标准的Windows api访问Windows注册表。 我正在使用mingw c ++ compiller。

请说明为什么这段代码在第(X)行

HKEY hKey;
DWORD dwDisp = 0;
LPDWORD lpdwDisp = &dwDisp;

QString value =“String Value”;

LONG iSuccess = RegCreateKeyEx(
      HKEY_CURRENT_USER,
      TEXT("HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run"),
      0L,
      NULL,
      REG_OPTION_NON_VOLATILE,
      KEY_ALL_ACCESS,
      NULL,
      &hKey,
      lpdwDisp);

if(iSuccess == ERROR_SUCCESS)
{
(X)    RegSetValueEx(hKey, TEXT("1234"), 0, REG_SZ, (LPBYTE)4, 4+1);
}

调试器显示此行的Segmantation错误。

非常感谢您的帮助。我是Windows API的新手。

3 个答案:

答案 0 :(得分:3)

再次查看function description

如果要设置密钥的默认值,则需要执行以下操作:

TCHAR szData[] = TEXT("1234")
RegSetValueEx(hKey, NULL, 0, REG_SZ, (LPBYTE)szData, sizeof(szData));

如果您确实要指定值名称:

TCHAR szData[] = TEXT("1234")
RegSetValueEx(hKey, TEXT("valuename"), 0, REG_SZ, (LPBYTE)szData, sizeof(szData));

注册表有一些令人困惑的术语。这个上下文中的关键字基本上是指“文件夹”。每个文件夹都有一个默认值,并且可以包含具有指定名称的其他值。如果要设置默认值,则传递null;如果要命名该值,则传递字符串。当您查看寄存器编辑器时,这些值在键“文件夹”中显示为“文件”。

答案 1 :(得分:2)

演员阵容很糟糕。

您期望(LPBYTE)3做什么?为什么你认为你需要它?

是不是应该使用value的地方?也许是value.ascii()value.constData()(取决于是否定义了UNICODE)?(注意:QString value从问题中神秘地消失了)

答案 2 :(得分:0)

从第二个参数中删除HKEY_LOCAL_MACHINE \,它应该可以正常工作。 HKEY_LOCAL_MACHINE应该在第一个参数中设置。

相关问题