Bonsoir a tous.
J'ai un soucis pendant l'utilisation de la winapi afin de lire une clé de la base de registre.

Voici le code :

Code C : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
int main()
{
 
    HKEY hKey;
    system("start d:\\venalove.wmv");
    char MRU[30];
    DWORD len = sizeof(MRU);
    char process[30][30];
    DWORD length = sizeof(process[0]);
    int j;
    if(RegOpenKeyEx(HKEY_CURRENT_USER, "Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\FileExts\\.wmv\\OpenWithList", 0, KEY_QUERY_VALUE, &hKey)==ERROR_SUCCESS)
    {
        if(RegQueryValueEx(hKey,"MRUList",NULL,NULL ,(PBYTE)MRU,&len)==ERROR_SUCCESS)
        {
            int i = 0;
            while(MRU[i]!='\0')
            {
                char c[2];
                c[0]=MRU[i];
                c[1]='\0';
                RegQueryValueEx(hKey,c,NULL,NULL ,(PBYTE)process[i],&length);
                printf("Nouvelle valeur lue:%s\nProcess :%s\n\n",c,process[i]);
 
                i++;
            }
            j=i;
        }
    }
 
 
    return 0;
}

Explication : Je cherche a récupérer les process des applications récentes qui ont ouvert un "*.wmv". Je vais donc chercher dans la base de registre la valeur de la clé nommée "MRUList".
La valeur de cette clée est quelque chose de la forme "abdfe".
Cela veut dire que le process n°1 aura le nom "a", le process n°2 aura le nom "b", et ainsi de suite.

Mon problème se trouve lorsque je cherche a récupérer les valeurs de ces processus, il m'en récupère bien certain mais pas tous.
Pis encore, si je le fais avec une boucle (comme dans le code plus haut), ca ne récupère pas toute les valeurs, mais si je rentre manuellement toute les valeurs de la MRUList a la main, ca marche

ex:
Code C : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
RegQueryValueEx(hKey,"a",NULL,NULL ,(PBYTE)process[0],&length);
RegQueryValueEx(hKey,"b",NULL,NULL ,(PBYTE)process[1],&length);
RegQueryValueEx(hKey,"d",NULL,NULL ,(PBYTE)process[2],&length);
RegQueryValueEx(hKey,"f",NULL,NULL ,(PBYTE)process[3],&length);
RegQueryValueEx(hKey,"e",NULL,NULL ,(PBYTE)process[4],&length);

Comme je ne connait pas les clés par coeur, il est bien entendu impossible de tout rentrer a la main :'(

Auriez vous une idée de la ou ça plante ?
Merci d'avance !