ATT: Soreno
Jeg har forsøgt at replikere dit vellykkede forsøg på at hente de installerede applikationer på en maskine. Jeg har dog lidt problemer med at Enumerere værdierne i subnøglerne til ...CurrentVersion\Uninstall. Her er hvad jeg har indtil videre:void getInstalledApplications() {
TCHAR nameBuffer [MAX_PATH];
TCHAR classBuffer [MAX_PATH];
TCHAR dataBuffer [MAX_PATH];
DWORD dwBuffSize, dwDataSize, dwRegType;
DWORD dwNumSubKeys, dwNumValues,
dwMaxValueLen,dwMaxValueNameLen, dwMaxClassLen,
dwSecurity;
FILETIME lastWriteTime;
HKEY hKey;
RegOpenKeyEx( HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall",
0, KEY_ALL_ACCESS, &hKey );
RegQueryInfoKey(hKey, classBuffer, &dwBuffSize, NULL, &dwNumSubKeys, &dwMaxValueLen, &dwMaxClassLen,
&dwNumValues, &dwMaxValueNameLen, &dwMaxValueLen, &dwSecurity, &lastWriteTime );
int i, j;
dwBuffSize = MAX_PATH;
dwDataSize = MAX_PATH;
DWORD keyType, nameBufSize, dataBufSize;
UCHAR valueKeyName[64], valueKeyData[64];
HKEY hSubKey;
for ( i = 0; RegEnumKeyEx (hKey, i, nameBuffer, &dwBuffSize, NULL, classBuffer, &dwDataSize, &lastWriteTime) != ERROR_NO_MORE_ITEMS; i++) {
if( RegOpenKeyEx( hKey, nameBuffer, 0, KEY_ALL_ACCESS, &hSubKey ) == ERROR_SUCCESS ) {
for( j = 0, j = ERROR_SUCCESS; j == ERROR_SUCCESS; j++ ) {
RegEnumValue( hSubKey, j, (CHAR*)valueKeyName, &nameBufSize, NULL, &keyType, (UCHAR*)valueKeyData, &dataBufSize );
string valueKeyNameString = string((const char*)valueKeyName);
string valueKeyDataString = string((const char*)valueKeyData);
cout << "Keyvalue: " << valueKeyDataString << endl;
}
}
}
}
Det er vist lidt rodet, men jeg mailer gerne.