c++注册表未获取第二个值

c++ registry not getting second value

本文关键字:第二个 获取 注册表 c++      更新时间:2023-10-16

为什么不起作用?第一个RegGetValue将正确的值放入value变量中,第二个没有,但是,如果我对第一个RegGetValue进行注释,那么第二个会起作用,并将正确的内容放入value2变量中。在第一次RegGetValue函数调用后,我尝试使用RegOpenKeyEx关闭并重新打开注册表项,但没有成功。我做错了什么

HKEY hKey = NULL;
LSTATUS res;
res=RegOpenKeyEx(HKEY_CLASSES_ROOT, "", 0, KEY_READ|KEY_WOW64_64KEY, &hKey);
if(res!=ERROR_SUCCESS)
         printf("insuccesn");
else {
    char value[255], value2[255];
    memset(value,0,255);
    memset(value2,0,255);
DWORD BufferSize = BUFFER;
RegGetValue(hKey,"\.jpeg","",RRF_RT_ANY,NULL,(PVOID)&value, &BufferSize);
strcat(value,"\DefaultIcon");
RegGetValue(hKey,"jpegfile\DefaultIcon","",RRF_RT_ANY,NULL,(PVOID)&value2, &BufferSize);
printf("succes %sn",value2);
}

来自RegGetValue手册中关于最后一个参数的信息;

pcbData[in,out,optional]

指向变量的指针,该变量指定pvData参数所指向的缓冲区的大小,以字节为单位。当函数返回时,此变量包含数据的大小已复制到pvData。

换句话说,第一次调用会将BufferSize变量的内容更改为返回的第一个值的大小,并且需要在第二次调用之前重置。