在线等回复 有关于RegSetValueEx的

a597926661 2012-08-15 02:09:19
先上一段代码

void CAppWDlg::OnModify()
{
UpdateData(true);
HKEY hKEY;//定义有关的hKEY,在查询结束时要关闭

//打开与路径 data_Set相关的hKEY
LPCTSTR data_Set="Software\\Microsoft\\Windows NT\\CurrentVersion\\";

//访问注册表,hKEY则保存此函数所打开的键的句柄
long ret0=(::RegOpenKeyEx(HKEY_LOCAL_MACHINE,data_Set,0,KEY_READ,&hKEY));
if(ret0!=ERROR_SUCCESS)//如果无法打开hKEY,则中止程序的执行
{
AfxMessageBox("错误:无法打开有关的hKEY");
return;
}

//设置有关的数据

LPBYTE lpb=new BYTE[m_strOwner.GetLength()+1];//一个汉字的长度是2 俩字节
for(int i=0;i<m_strOwner.GetLength();i++)
{
lpb[i]=m_strOwner[i];
}
lpb[m_strOwner.GetLength()]=0;

// int pp=m_strOwner.GetLength(); PP=6
LPBYTE owner_Set=lpb;//定义用户姓名 owner_Set
DWORD type_1=REG_SZ;//定义数据类型

DWORD cbData_1=m_strOwner.GetLength()+1;//定义数据长度
long ret_own=::RegSetValueEx(hKEY,"RegisteredOwner",NULL,type_1,owner_Set,cbData_1);//此处有问题
// long ret1=::RegSetValue(hKEY,"RegisteredOwner",type_1,m_strOwner,cbData_1);
if(ret_own!=ERROR_SUCCESS)
{
AfxMessageBox("错误:无法设置有关的注册表信息01");
return;
}

LPBYTE lpb2=new BYTE[m_Company.GetLength()+1];
for(int j=0;j<m_Company.GetLength();j++)
{
lpb2[j]=m_Company[j];
}
lpb2[m_Company.GetLength()]=0;

//查询公司名
LPBYTE company_Set=lpb2;//定义公司名称 company_Set
DWORD type_2=REG_SZ;//定义数据类型
DWORD cbData_2=m_Company.GetLength()+1;//定义数据长度

long ret2=::RegSetValueEx(hKEY,"RegisteredOrganization",NULL,type_2,(LPBYTE)company_Set,cbData_2);
//long ret2=::RegSetValue(hKEY,"RegisteredOrganization",type_2,m_Company,cbData_2);

if(ret2!=ERROR_SUCCESS)
{
AfxMessageBox("错误:无法设置有关的注册表信息");
return;
}
else
{
AfxMessageBox("注册表修改完成");
}
//程序结束,关闭打开的hKEY
::RegCloseKey(hKEY);
UpdateData(false);
}

上数代码在执行到第一个RegSetValueEx()函数时就终止了 debugger的时候显示返回值是5 我新手一枚 希望各位大神给一个详细的解决方法 有代码最好
代码想实现的功能就是修改注册表中RegisteredOwner和RegisteredOrganization的键值 但是一直修改不了 希望各位不吝赐教
...全文
166 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
a597926661 2012-08-15
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 的回复:]
long ret0=(::RegOpenKeyEx(HKEY_LOCAL_MACHINE,data_Set,0,KEY_READ|KEY_WRITE,&hKEY));
[/Quote]
[Quote=引用 11 楼 的回复:]
应该找到问题原因了,恭喜楼主
[/Quote]
问题解决 感谢各位 特别致谢a2901153 BombZhang

傻X 2012-08-15
  • 打赏
  • 举报
回复
应该找到问题原因了,恭喜楼主
BombZhang 2012-08-15
  • 打赏
  • 举报
回复
long ret0=(::RegOpenKeyEx(HKEY_LOCAL_MACHINE,data_Set,0,KEY_READ|KEY_WRITE,&hKEY));
a2901153 2012-08-15
  • 打赏
  • 举报
回复
以前编过一个注册表,用的是RegOpenKey,只有三个参数,不涉及到权限的问题;
后面的RegValueEx和你的差不多
a2901153 2012-08-15
  • 打赏
  • 举报
回复
long ret0=(::RegOpenKeyEx(HKEY_LOCAL_MACHINE,data_Set,0,KEY_READ,&hKEY));
这行,你以read的方式打开,然后想修改数值,这样应该不可以吧
Gloveing 2012-08-15
  • 打赏
  • 举报
回复
LPCTSTR data_Set="Software\\Microsoft\\Windows NT\\CurrentVersion\\";
改成-》
LPCTSTR data_Set="Software\\Microsoft\\Windows NT\\CurrentVersion";
试试?
a597926661 2012-08-15
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]
引用 3 楼 的回复:
我是系统管理员Administrator登录的 可以用注册表编辑器修改 应该有足够的权限

即便是以管理员登陆,但是你的程序不见得就是以管理员身份运行的啊
[/Quote]
XP系统 我在debug文件夹下右键选择运行方式 是在Administrator下运行 依然不行
Gloveing 2012-08-15
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]
我是系统管理员Administrator登录的 可以用注册表编辑器修改 应该有足够的权限
[/Quote]
即便是以管理员登陆,但是你的程序不见得就是以管理员身份运行的啊
a597926661 2012-08-15
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
5 --- Access Deny, 你访问的注册表是否有权限
[/Quote]
是不是某些参数的数据类型不对 帮我看看吧
a597926661 2012-08-15
  • 打赏
  • 举报
回复
我是系统管理员Administrator登录的 可以用注册表编辑器修改 应该有足够的权限
oyljerry 2012-08-15
  • 打赏
  • 举报
回复
5 --- Access Deny, 你访问的注册表是否有权限
a597926661 2012-08-15
  • 打赏
  • 举报
回复
别沉了 先顶顶

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧