Próbuję odczytać rejestru „(Domyślna)” Wartości w Windows 7 w C++ i Poniżej znajduje się kod używam:Odczyt rejestru w Windows 7 zachowuje się dziwnie
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 "" ;
}
I to jest jak ja wzywam powyższą funkcję:
string ts3 = GetSZValueUnique(HKEY_LOCAL_MACHINE, "SOFTWARE\\TeamSpeak 3 Client\\", "");
if (!ts3.empty())
MessageBox(0, ts3.c_str(), "GetSZValueUnique", 0);
dla niektórych klawiszy działa dla niektórych to nie: na przykład, że pracuje dla „Adobe”, „TrendMicro”, „Checkpoint”, „RegisteredApplications”, ale nie dla "7-Zip", "RTLSetup", "Sonic", "TeamSpeak 3 Client"
Jestem teraz bez pomysłów, czy ktoś może wskazać, co jest nie tak?
EDIT: Sprawdziłem kod „(domyślne)” wartości i inne wartości, jak również, na klucze jej nie pracuje to nie mija * „if (retValue == ERROR_SUCCESS)” * sprawdzić i I zawsze otrzymuję "Określony plik nie znaleziono" błąd. Dla kluczy działa, przechodzi przez kontrolę "* if (retValue == ERROR_SUCCESS) *" i zwraca wartość, jeśli jej obecny, jeśli jej nie ma, po prostu wyświetla komunikat o błędzie "Podany plik nie został znaleziony".
EDIT 2: Sprawdziłem jeszcze raz, i wydaje się, że to działa na klucze mają odpowiednią klon w „Wow6432Node” podklucz SOFTWARE ... hmmm ... więc jak mogę to działa?
Jakie zachowanie występuje? Czy ręcznie sprawdziłeś, czy są jakieś dane dotyczące tych ostatnich wpisów? –
Po pierwsze, czy Twoja aplikacja ma 64-bitową lub 32-bitową, czy drugą, czy zauważyłeś różnicę w algorytmie "działającym", gdy 32-bitowa aplikacja wyszukuje 32-bitowe powiązane aplikacje lub 64-bitowa aplikacja wyszukuje 64-bitowe aplikacje, ale gdy miksujesz te dwie rzeczy wydaje się nie działać? Jeśli tak, to google [Wow6432Node] (http://msdn.microsoft.com/en-us/library/windows/desktop/ms724072 (v = vs.85) .aspx). – WhozCraig
@ bash.d Zaktualizowano oryginalne pytanie. – StudentX