点击这里给我发消息 点击这里给我发消息

C++ 获取注册表多字符串值方法

添加时间:2013-12-7
    相关阅读: DW C++
 源于MFC编程时出现的一些问题,或许Linux编程不会出现这些问题,但是我写出来总结一下相关的经验。

在获取注册表中REG_MULTI_SZ的值的时候,往往会出现只能取到头一个值的情况,那么我们能够怎么样获取多个字符串的值呢?查了相关资料,说是字符串之间是以'\0'结束,而总串是以'\0\0'结束的,于是我就写了一个判断的方法,用char *p指向那个串的地址,只要是 '\0'就跳过去,是'\0\0'就结束,但是我实验的结果并不是那样的,因为我并不知道里面到底是什么。

所以,我换了一种思路,因为注册表里面的值无非都是一些ASCII的值,一般在0~128之间,我还是定义了一个char *p;那么我开始判断*p的值是不是在这个范围之内,如果不是我就跳过去,如果是我就赋给一个字符串,让他自加。那么什么时候判断结束呢?有时候返回的信息并不止这么多,所以我举一个例子:

char *p;CString str;

p = lpsc->lpDependencies;

//如何获取当前的依赖服务大小?

//char *q;

//q=lpsc->lpDisplayName;//p-q等于p的依赖服务大小加上q的名字。

//设置静态变量,当分割lpDependencies和lpDisplayName时直接退出。

static int n;

for(DWORD i=0;i < dwBytesNeeded;i++)

 {

 if(*p>0 && *p <128)//判断如果不在这个字符范围内,即可能是分割各个字段的分割符。

 {

 str += *p;

 p++;

 n=0;//如果连续移动,设置n为0,既没有多个分割符在一起。

 }

 else

 {

//如果有分隔符,一个的话即为多字符串之间内部的分割,例如:Dhcp的服务依赖:Tcpip@Afd@NetBT@@@@@,用@分割。

 str += " ";

 p++;

 n++;

 if(n>2)

 break;

//如果有分隔符,且不止一个,即为多字符串的分割。其实分割符占用5个char类型的空间。Win Server 的为3个char类型的空间。

  }

 }

  以上例子是在获取某个服务的时候的相关服务时取到的结果,取到自己想要的值。

咨询热线:020-85648757 85648755 85648616 0755-27912581 客服:020-85648756 0755-27912581 业务传真:020-32579052
广州市网景网络科技有限公司 Copyright◎2003-2008 Veelink.com. All Rights Reserved.
广州商务地址:广东省广州市黄埔大道中203号(海景园区)海景花园C栋501室
= 深圳商务地址:深圳市宝源路华丰宝源大厦606
研发中心:广东广州市天河软件园海景园区 粤ICP备05103322号 工商注册