Ich habe einige sehr alte Code, aber es sollte Ihnen eine gute Idee geben:
/**
* @param location The location of the registry key. For example "Software\\Bethesda Softworks\\Morrowind"
* @param name the name of the registry key, for example "Installed Path"
* @return the value of the key or an empty string if an error occured.
*/
std::string getRegKey(const std::string& location, const std::string& name){
HKEY key;
TCHAR value[1024];
DWORD bufLen = 1024*sizeof(TCHAR);
long ret;
ret = RegOpenKeyExA(HKEY_LOCAL_MACHINE, location.c_str(), 0, KEY_QUERY_VALUE, &key);
if(ret != ERROR_SUCCESS){
return std::string();
}
ret = RegQueryValueExA(key, name.c_str(), 0, 0, (LPBYTE) value, &bufLen);
RegCloseKey(key);
if ((ret != ERROR_SUCCESS) || (bufLen > 1024*sizeof(TCHAR))){
return std::string();
}
std::string stringValue = std::string(value, (size_t)bufLen - 1);
size_t i = stringValue.length();
while(i > 0 && stringValue[i-1] == '\0'){
--i;
}
return stringValue.substr(0,i);
}
awesomeness, vielen Dank – Maciek
wie die pos Zeichenfolge durch die Art und Weise zusammengesetzt? – Maciek
Dieser Code ist möglicherweise unsicher. Die RegQueryValueEx-Dokumentation (http://msdn.microsoft.com/en-us/library/ms724911(VS.85).aspx) sagt (im Abschnitt "Hinweise"), dass die abgerufene Zeichenfolge möglicherweise nicht null terminiert ist. Darüber hinaus wird es, wenn es sich um eine "Multi-Zeichenfolge" handelt, einen Doppel-Null-Terminator haben, der ebenfalls von diesem Code falsch behandelt wird. –