在获取注册表中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类型的空间。
}
}
以上例子是在获取某个服务的时候的相关服务时取到的结果,取到自己想要的值。