2013-02-26 12 views
5

davranıyor ++ c Windows 7'de değerleri ve aşağıdaki kullanıyorum kodudur:Okuma Sicil Windows 7'de ben kayıt yönettiği "(Varsayılan)" okumaya çalışıyorum garip

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 "" ; 
} 

Ve bu nasıl

string ts3 = GetSZValueUnique(HKEY_LOCAL_MACHINE, "SOFTWARE\\TeamSpeak 3 Client\\", ""); 
if (!ts3.empty()) 
    MessageBox(0, ts3.c_str(), "GetSZValueUnique", 0); 

bazıları için çalışıyor bazı Keys için bu değildir:: Örneğin, "Adobe", "TrendMicro", "Denetim Noktası", "RegisteredApplications" değil için için çalışır yukarıdaki işlevini arıyorum "7-Zip", "RTLSetup", "Sonic", "TeamSpeak 3 Client"

Şimdi bir fikrim yok, birisi neyin yanlış olduğuna işaret edebilir mi?

DÜZENLEME: Birlikte kod kontrol ettikten "(Varsayılan)" değerler ve diğer değerler de, anahtarlar için onun asla onu çalışmıyor "(retValue == ERROR_SUCCESS) eğer" * * kontrol edip I geçmiş gider her zaman "Belirtilen dosya bulunamadı" hatası. Anahtarlar çalıştığı zaman, "* (retValue == ERROR_SUCCESS) *" değerini geçer ve eğer mevcut değilse, "Belirtilen dosya bulunamadı" hata mesajını görüntüler. öyleyse nasıl o çalışma alırım ... ve buna hmmm ... YAZILIM altında "Wow6432Node" alt anahtarında bunlara karşılık gelen klon var çalışır tuşları görünüyor:

DÜZENLEME 2: Tekrar Kontrol Edildi?

+0

Hangi davranışları yaşıyorsunuz? Sonraki girişler için herhangi bir veri olup olmadığını kontrol ettiniz mi? –

+3

Öncelikle, uygulamanızın 64bit veya 32bit, ikincisi, 32bit uygulamanız 32bit ilişkili uygulamaları ararken ya da 64 bit uygulamanız 64bit ilişkili uygulamaları ararken, ancak iki şeyi karıştırdığınızda algoritmanızdaki "çalışma" farkını fark ettiniz. işe yaramıyor mu? Eğer öyleyse, google [Wow6432Node] (http://msdn.microsoft.com/en-us/library/windows/desktop/ms724072 (v = vs.85) .aspx). – WhozCraig

+0

@ bash.d Özgün soru güncellendi. – StudentX

cevap

6

Sen bayrağını ::

  1. RegOpenKeyEx ait "samDesired" parametresinde "KEY_WOW64_32KEY" Eğer Wow6432Node Keys erişmek istiyorsanız belirtebilirsiniz yani 32 bit anahtarları dan senin app
  2. RegOpenKeyEx ait "samDesired" parametresinde "KEY_WOW64_64KEY" normal Keys erişmek istiyorsanız yani 64 bit anahtarları uygulamanızdan.

Not: Şüpheniz zaten @WhozCraig tarafından uygun bağlantılara sahip yorumlarda belirtilmiştir. Cevaplarsa, cevabını benimkinden kabul et.

İlgili konular