DWORD dwDisposition; HKEY hNewKey=NULL; LONG nRet=RegCreateKeyEx(
HKEY_LOCAL_MACHINE, "SOFTWARE\\China Mobile\\Fetion\\test",
0,
NULL, REG_OPTION_NON_VOLATILE, NULL, NULL, &hNewKey, &dwDisposition
) ; if(nRet!= ERROR_SUCCESS)
{
printf("打开失败\n");
int xx=GetLastError(); return -1;
} RegCloseKey(hNewKey) ;权限是管理员,平台是 win7+vs2008
HKEY_LOCAL_MACHINE, "SOFTWARE\\China Mobile\\Fetion\\test",
0,
NULL, REG_OPTION_NON_VOLATILE, NULL, NULL, &hNewKey, &dwDisposition
) ; if(nRet!= ERROR_SUCCESS)
{
printf("打开失败\n");
int xx=GetLastError(); return -1;
} RegCloseKey(hNewKey) ;权限是管理员,平台是 win7+vs2008
HKEY_LOCAL_MACHINE, "SOFTWARE\\China Mobile\\Fetion\\test",
0,
NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE|KEY_READ,//////NULL NULL, &hNewKey, &dwDisposition
) ;
成功了问个问题啊,这段代码只能搞定 创建一个 叫test的子项,如果想给子项 test 一个值该怎么办啊?查了msdn,说不能做到。如果不能做到,那么我在创建的时候,就会默认有个叫 “默认”的子项,其类型是REG_SZ.能不能再创建的时候,对其指定类型,或者说对其命名?
你自己用RegSetValueEx创建一个键值不就好了,干嘛非要用默认的那个
HKEY_LOCAL_MACHINE, "SOFTWARE\\test",
0,
NULL, //REG_DWORD REG_OPTION_NON_VOLATILE, NULL, NULL, &hNewKey, &dwDisposition
) ; if(nRet!= ERROR_SUCCESS)
{
if(dwDisposition==REG_OPENED_EXISTING_KEY)
{
printf("存在\n");
////regopenex来打开
//nRet=RegOpenKeyEx(
// HKEY_LOCAL_MACHINE,
// "SOFTWARE\\test",
// 0,
// NULL,
// &hNewKey );
//if(nRet!=ERROR_SUCCESS)
//{
// printf("再次打开失败\n");
// return -1;
//}
}
else
printf(" 其他错误\n");
}
const BYTE mydata=2;
nRet= RegSetValueEx(
hNewKey,
"nihao",
0,
REG_DWORD,
&mydata,
sizeof(BYTE)
);if(nRet!= ERROR_SUCCESS)
{
printf("error\n");
}
RegCloseKey(hNewKey) ;
RegSetValueEx的用法师查询msdn的, 没有错误啊
HKEY_LOCAL_MACHINE, "SOFTWARE\\test",
0,
NULL, //REG_DWORD REG_OPTION_NON_VOLATILE, KEY_READ | KEY_WRITE,
NULL, &hNewKey, &dwDisposition
) ;这才对啊
现在剩下了一个最后问题:
nRet= RegSetValueEx(
hNewKey,
"nihao",
0,
REG_DWORD,
&mydata,
sizeof(BYTE)
);虽然已经已经设置了值, 但是 在注册表中提示 DWORD类型不对
如果是DWORD,后面的参数应该是sizeof(DWORD)吧
可以再追问一个问题吗, 太麻烦你了啊DWORD dwDisposition; HKEY hNewKey=NULL; LONG nRet=RegCreateKeyEx(
HKEY_LOCAL_MACHINE, "SOFTWARE\\test",
0,
NULL, //REG_DWORD REG_OPTION_NON_VOLATILE, KEY_READ | KEY_WRITE,
NULL, &hNewKey, &dwDisposition
) ; if(nRet!= ERROR_SUCCESS)
{
printf(" 其他错误\n");
return 0; }
BYTE mydata[4];memset(mydata,0,4);mydata[0]=1;
nRet= RegSetValueEx(
hNewKey,
"nihao",
0,
REG_DWORD,
mydata,
sizeof(DWORD)
);if(nRet!= ERROR_SUCCESS)
{
printf("error\n");
} char buf[50]; memset(buf,0,50);
RegEnumKey(hNewKey, 1, buf, 50); //buf的值依然是空的printf("%s",buf);
RegCloseKey(hNewKey) ;
所有函数都对了,除了regEnumKey外, 这个函数拿不到值啊,我已经看了注册表了, 里面是由值的。
The index of the subkey of hKey to be retrieved. This value should be zero for the first call to the RegEnumKey function and then incremented for subsequent calls. Because subkeys are not ordered, any new subkey will have an arbitrary index. This means that the function may return subkeys in any order.