我正在尝试使用标准的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的新手。
答案 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应该在第一个参数中设置。