小弟在写一个系统优化的小程序
其中要修改一些注册表的键值
当修改DWORD型值的时候并没有什么问题,可以得到正确的结果,代码如下:
HKEY hKey;
char SubKeyName[] = "SOFTWARE\\Microsoft\\Internet Explorer\\Security";
char ValueName[] = "BlockXBM";
//解决XP+SP2不能正确显示注册码
BYTE ValueData[64];
DWORD Buffer;
//打开
if (RegOpenKeyEx(HKEY_LOCAL_MACHINE,SubKeyName,0,KEY_ALL_ACCESS,&hKey) != ERROR_SUCCESS)
{
cout << "Error: Regedit cannot be opened!"<<endl;
}
else
{
//读原来的键值
Buffer = sizeof (ValueData);
if (RegQueryValueEx(hKey,ValueName,0,NULL,ValueData,&Buffer) != ERROR_SUCCESS)
{
//不存在
//新建一个值为0的DWORD
DWORD temp = 0;
if (RegSetValueEx(hKey,ValueName,0,REG_DWORD,(LPBYTE)&temp,sizeof(DWORD)) != ERROR_SUCCESS)
{
cout << "Error: Create Value failed"<<endl;
}
RegCloseKey(hKey);
}
else
{
//存在
//改变值
DWORD temp = 0;
if (RegSetValueEx(hKey,ValueName,0,REG_DWORD,(LPBYTE)&temp,sizeof(DWORD)) != ERROR_SUCCESS)
{
cout << "Error: Change Value failed"<<endl;
RegCloseKey(hKey);
}
}
}
但在修改REG_SZ型键值的时候就出了问题,编译无错,但结果并不正确,并没有修改键值,代码如下(接着上面的写的)
//自动关闭停止响应程序
strcpy (SubKeyName,"Control Panel\\Desktop");
strcpy (ValueName,"AutoEndTasks");
Buffer = sizeof (ValueData);
//打开注册表
if (RegOpenKeyEx(HKEY_CURRENT_USER,SubKeyName,0,KEY_ALL_ACCESS,&hKey) != ERROR_SUCCESS)
{
cout << "Error: Regedit cannot be opened!"<<endl;
}
else
{
//新建一个值为1的REG_SZ
BYTE sz_temp[] = "1";
if (RegQueryValueEx(hKey,ValueName,0,NULL,ValueData,&Buffer) != ERROR_SUCCESS)
{
//不存在
if (RegSetValueEx(hKey,ValueName,0,REG_EXPAND_SZ,sz_temp,sizeof(sz_temp)) != ERROR_SUCCESS)
{
cout << "Error: Create Value failed"<<endl;
}
RegCloseKey(hKey);
}
else
{
cout << Buffer;
//存在
//更改
if (RegSetValueEx(hKey,ValueName,0,REG_EXPAND_SZ,sz_temp,sizeof(sz_temp)) != ERROR_SUCCESS)
{
cout << "Error: Change Value failed"<<endl;
}
}
RegCloseKey(hKey);
}
请大家帮帮忙,谢谢了!
我看不懂啊
uping