Я пытаюсь прочитать значения реестра "(по умолчанию)" в Windows 7 в С++, а следующий код - я использую:
string GetSZValueUnique( HKEY openKey, const char* regkey, const char* keyName )
{
HKEY hKey = 0;
BYTE data[512] ;
DWORD szsize = 512 ;
string value ;
LONG retValue = RegOpenKeyEx( openKey, regkey, 0, KEY_READ, &hKey ) ;
if ( retValue == ERROR_SUCCESS )
{
LONG retV = RegQueryValueEx( hKey, keyName, 0, 0, data, &szsize ) ;
if ( retV == ERROR_SUCCESS )
{
char* _value = reinterpret_cast<char*>(data) ;
value = _value ;
RegCloseKey (hKey) ;
return value ;
}
else
{
char msg[512] ;
FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM,0,(DWORD)retV,0,&msg[0],512,0) ;
error_string = &msg[0];
MessageBox( 0, error_string.c_str(), "Query : GetSZValueUnique", 0 );
}
}
else
{
char msg[512] ;
FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM,0,(DWORD)retV,0,&msg[0],512,0) ;
error_string = &msg[0];
MessageBox( 0, error_string.c_str(), "Open : GetSZValueUnique", 0 );
}
RegCloseKey (hKey) ;
return "" ;
}
И вот как я вызываю вышеупомянутую функцию:
string ts3 = GetSZValueUnique( HKEY_LOCAL_MACHINE, "SOFTWARE\\TeamSpeak 3 Client\\", "" );
if ( !ts3.empty() )
MessageBox( 0, ts3.c_str(), "GetSZValueUnique", 0 );
Для некоторых Ключей он работает для некоторых, которых нет: например, он работает для "Adobe", "TrendMicro", "CheckPoint", "RegisteredApplications", но не для "7-Zip", "RTLSetup", Sonic "," TeamSpeak 3 Client "
Теперь я из идей, может кто-нибудь указать, что случилось?
EDIT: Я проверил код со значениями "(по умолчанию)" и другими значениями, так как клавиши, которые он не работает, никогда не проходят мимо "* if (retValue == ERROR_SUCCESS)" * check, и я всегда получаю ошибку "Указанный файл не найден". Для ключей, которые он работает, он пропускает "* if (retValue == ERROR_SUCCESS) *" и возвращает значение, если его присутствует, если его нет, он просто отображает сообщение об ошибке "Указанный файл не найден".
РЕДАКТИРОВАТЬ 2: Я снова проверил: и кажется, что ключи, на которые он работает, имеют соответствующий клон в разделе "Wow6432Node" в SOFTWARE... хммм... так как я могу заставить его работать