Parcours récursif d'une clé pour trouver d'autres clés (par exemple pour récupérer la version de Firefox) :
strncpy(buf1,"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall", sizeof("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall"));
ret = RegOpenKeyEx(HKEY_LOCAL_MACHINE,"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall",0,
KEY_QUERY_VALUE| KEY_ENUMERATE_SUB_KEYS, &handlekey);
if(ret != ERROR_SUCCESS)
{
printf("%ld %ld\n", GetLastError(), ret);
return;
}
//if(log == NULL)return;
for(dw=0;RegEnumKey(handlekey,dw,version, sizeof(version))==ERROR_SUCCESS; dw++)
{
ZeroMemory(buf2,sizeof(buf2));//
ZeroMemory(buf3,sizeof(buf3));//
strcat(buf2, buf1);
strcat(buf2, "\\");
strcat(buf2,version);
ret = RegOpenKeyEx(HKEY_LOCAL_MACHINE,buf2,0,KEY_QUERY_VALUE, &handlekey1);
if(ret == ERROR_SUCCESS)
{
dw1 = sizeof(buf);
ret = RegQueryValueEx(handlekey1,"DisplayName",NULL,0,(PBYTE)buf, &dw1);
if(ret == ERROR_SUCCESS)
{
if(strstr(buf,"Mozilla")!= NULL || strstr(buf,"Opera")!= NULL || \
strstr(buf,"Chrome")!= NULL )
{
ret = RegQueryValueEx(handlekey1,"DisplayVersion",NULL,0,(PBYTE)buf3, &dw1);
if(log != NULL)
fprintf(log,"Nom : %s \r\n\tVersion : %s\r\n\r\n", buf, buf3);
}
RegCloseKey(handlekey1);
}
}
RegCloseKey(handlekey);