lire clé de la base de registre
Bonjours,
j'ai implementé une methode qui fait un parcour de HKEY_CLASSES_ROOT\\CLSID et ensuite je n'arrive pas à lire la valeur de
HKEY_CLASSES_ROOT\\CLSID\\ ( GUI)\\InprocServer32 puis la Valeur de (Default)
Voila Le boucle pour parcourir la base de regitre:
Code:
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 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
| HRESULT hr = S_OK;
HKEY hk = HKEY_CLASSES_ROOT;
TCHAR szKey1[256];
HKEY hProgID,hProgID1,hProgID2, hProgID3;
CString progid = "";
int returnValue;
DWORD dwLen;
LPBYTE dwKeyEn;
CHAR achClass[MAX_PATH] = ""; // buffer for class name
DWORD cchClassName = MAX_PATH; // size of class string
DWORD cSubKeys; // number of subkeys
DWORD cbMaxSubKey; // longest subkey size
DWORD cchMaxClass; // longest class string
DWORD cValues; // number of values for key
DWORD cchMaxValue; // longest value name
DWORD cbMaxValueData; // longest value data
DWORD cbSecurityDescriptor; // size of security descriptor
FILETIME ftLastWriteTime; // last write time
DWORD j;
DWORD retValue;
CHAR achValue[MAX_VALUE_NAME];
DWORD cchValue = MAX_VALUE_NAME;
if(::RegOpenKey(hk, "CLSID", &hProgID) == ERROR_SUCCESS)
{
for(int nIndex2 = 0; ::RegEnumKey(hProgID, nIndex2, szKey1, 256) == ERROR_SUCCESS; nIndex2++)
{
if(::RegOpenKey(hk, "CLSID\\"+ (CString )szKey1 + "\\InprocServer32", &hProgID1) == ERROR_SUCCESS)
{
CString ClassID = (CString )szKey1;
CString ProgID;
//*********** ici je veux lire "CLSID\\"+ (CString )szKey1 + "\\InprocServer32" la valeur qui est par default
::RegCloseKey(hProgID1);
}
}
::RegCloseKey(hProgID);
} |
lire clé de la base de registre
j'ai utilisé RegQueryValueEx mais la valeur retourner pour le champs - Default de la base de registre est vide
- alors que si je met ThreadingModel au lieu de Default il retourne la valeur correct.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
| for(int nIndex2 = 0; ::RegEnumKey(hProgID, nIndex2, szKey1, 256) == ERROR_SUCCESS; nIndex2++)
{
if(::RegOpenKey(hk, "CLSID\\"+ (CString )szKey1 + "\\InprocServer32", &hProgID1) == ERROR_SUCCESS) {
RegQueryValueEx(hProgID1, "(Default)" , 0, &DataType, NULL,&lenKeyValue);
RegQueryValueEx(hProgID1, "(Default)" , 0, &DataType,(LPBYTE)lpszNIC_Description, &lenKeyValue);
add->listBox2->insertItem(lpszNIC_Description);
::RegCloseKey(hProgID1);
}
} |
lire clé de la base de registre
c bon j'ai trouvé la solution, il faut mettre 0 au lieu de "Default".
Merci pour votre réponse Mr Aurelien.Regat-Barrel.