我想讀註冊表的「(默認)」值,在Windows 7中的C++和下面是我使用的代碼:閱讀在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」,「趨勢科技」,「檢查點」,「RegisteredApplications」而不是「7-Zip」,「RTLSetup」,「Sonic」,「TeamSpeak 3客戶端」
我現在沒有想法了,有人能指出有什麼不對嗎?
編輯:我檢查了「(默認)」值和其他值的代碼,對於它不工作的鍵,它永遠不會超過*「if(retValue == ERROR_SUCCESS)」* check和I總是得到「指定的文件未找到」錯誤。對於其工作的鍵,它會通過「* if(retValue == ERROR_SUCCESS)*」檢查並返回值,如果它不存在,則只顯示錯誤消息「指定的文件未找到」。
編輯2:我再次檢查:它似乎它適用於在「Wow6432Node」子項及其相應的克隆在軟件...嗯鍵......讓我怎麼得到它的工作?
你正在經歷什麼行爲?您是否手動檢查過後面的條目是否有數據? – 2013-02-26 08:23:37
首先,您的應用程序是64位還是32位,其次,您是否注意到32位應用程序查找32位相關應用程序或您的64位應用程序查找64位關聯應用程序時「運行」的算法有所不同,但是當您將兩件事似乎沒有工作?如果是這樣,google [Wow6432Node](http://msdn.microsoft.com/en-us/library/windows/desktop/ms724072(v = vs.85).aspx)。 – WhozCraig 2013-02-26 08:29:35
@ bash.d更新了原來的問題。 – StudentX 2013-02-26 08:31:01