VC与EVC注册表读写操作对比

转载原址:http://www.yulemao.com/1/blogdetail!3753.aspx

EVC和VC下对注册表操作的方法有一些区别,

在VC下对注册表的写操作方法步骤如下:
先用RegCreateKey创建注册表项,然后RegSetValue或者RegSetValueEx函数对注册表的值进行写入;孙鑫老师写的代码如下:
 HKEY hKey;
 DWORD dwAge=30;
 RegCreateKey(HKEY_LOCAL_MACHINE,"Software//http://www.sunxin.org//admin",&hKey);
 RegSetValue(hKey,NULL,REG_SZ,"zhangsan",strlen("zhangsan"));
 RegSetValueEx(hKey,"age",0,REG_DWORD,(CONST BYTE*)&dwAge,4);
 RegCloseKey(hKey);
这里需要说明的是用RegSetValue函数只能写入类型为REG_SZ的项值,而用RegSetValueEx函数,就可以写任意类型的项值;RegSetValueEx函数中,最后一个传入参数,我个人认为应该用sizeof(DWORD)来代替比较好点。

在VC下对注册表的读写操作方法步骤如下:
一种方法是用RegQueryValue函数直接读取注册表项;孙鑫老师写的代码如下:
 LONG lValue;
 RegQueryValue(HKEY_LOCAL_MACHINE,"Software//http://www.sunxin.org//admin",
  NULL,&lValue);
 char *pBuf=new char[lValue];
 RegQueryValue(HKEY_LOCAL_MACHINE,"Software//http://www.sunxin.org//admin",
  pBuf,&lValue);
 MessageBox(pBuf);
另一种方法是写用RegOpenKey函数打开注册表,然后再用RegQueryValueEx函数读取注册表信息;孙鑫老师写的代码如下:
 HKEY hKey;
 RegOpenKey(HKEY_LOCAL_MACHINE,"Software//http://www.sunxin.org//admin",&hKey);
 DWORD dwType;
 DWORD dwValue;
 DWORD dwAge;
 RegQueryValueEx(hKey,"age",0,&dwType,(LPBYTE)&dwAge,&dwValue);
 CString str;
 str.Format("age=%d",dwAge);
 MessageBox(str);
同样,这里的RegQueryValue函数与RegQueryValueEx函数的区别也是项值类型的限制与否,跟写注册表的时候是一样的。

 

在EVC中,对于注册表的操作只有RegCreateKeyEx、RegSetValueEx、RegOpenKeyEx、 RegQueryValueEx这类函数,这些函数的参数也比较多,而且在EVC下由于是Unicode编程,所以在一些字符参数中要考虑到这点才行;

下面是EVC中,对注册表写操作的方法步骤:
用RegCreateKeyEx创建注册表项,然后用RegSetValueEx函数对注册表的值进行写入;下面是我写的一段代码:
 HKEY hKey;
 DWORD dwDisp;
 RegCreateKeyEx(HKEY_LOCAL_MACHINE,L"Software//http://www.sunxin.org//admin",0,
  NULL,REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,NULL,&hKey,&dwDisp);
 //================================
 //================================
 TCHAR name[9]=L"zhangsan";
 DWORD sz_name;
 sz_name = 1+lstrlen(name);
 RegSetValueEx(hKey,NULL,0,REG_SZ,(LPBYTE)name,sizeof(TCHAR)*sz_name);
 //================================
 //================================
 DWORD dwAge=30;
 RegSetValueEx(hKey,L"age",0,REG_DWORD,(CONST BYTE*)&dwAge,sizeof(DWORD));
 RegCloseKey(hKey);//关闭句柄
简要说明:
RegCreateKeyEx 函数的参数一共有9个参数,其中有不少参数与RegCreateKey函数的相同,第3~8个参数在这里好像没什么太大关系,设置成0与NULL对操作没有什么影响;最后一个参数,是一个输出参数,我也不大明白它的作用,只要定义个变量,然后让它输出就是了。
RegSetValueEx这个函数统一对注册表进行写操作,这里要说明的是在写类型为REG_SZ的项值时,最后一个参数长度,这里为什么要先加1,然后又要乘于一个sizeof (TCHAR),我不是很明白,应该是跟lstrlen函数有关吧。我也是参考其他代码写的。对于写类型为REG_DWORD的项值时,最后一个参数就用 sizeof(DWORD),测试可以正常工作。

对注册表读操作的方法步骤:
先用RegOpenKeyEx打开注册表,得到句柄,然后用该句柄使用RegQueryValueEx函数来读取相关的注册表信息;其中,在读类型为REG_SZ的值时,需要先获取下值的长度,然后再根据返回的长度创建缓冲区,最后再来读取值到缓冲区;
 //打开注册表句柄
 HKEY hKey;
 RegOpenKeyEx(HKEY_LOCAL_MACHINE,L"Software//http://www.sunxin.org//admin",0,0,&hKey);

 DWORD lLength;//值的长度
 DWORD lType;//值的类型
 RegQueryValueEx(hKey,NULL,0,&lType,NULL,&lLength);
 lLength *= sizeof(TCHAR);
 TCHAR *pBuf=new TCHAR[lLength];//返回值缓冲区
 RegQueryValueEx(hKey,NULL,0,&lType,(LPBYTE)pBuf,&lLength);
 MessageBox(pBuf);

 DWORD dwAge;//返回值
 RegQueryValueEx(hKey,L"age",0,&lType,(LPBYTE)&dwAge,&lLength);
 CString str;
 str.Format(L"age=%d",dwAge);
 MessageBox(str);

//===================================================
//===================================================
//===================================================
最后,想要说的是,可以将EVC对注册表读取的方法封装一下,这样就可以比较简单地使用。在下篇文章中详细讲述这种方法。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值