Dưới đây là một số mã giả để lấy như sau:
- Nếu một khóa registry tồn tại
- gì giá trị mặc định là dành cho registry key
- Thật là một chuỗi giá trị là
- Giá trị DWORD là gì
đang
Ví dụ:
Bao gồm các phụ thuộc thư viện: Advapi32.lib
HKEY hKey;
LONG lRes = RegOpenKeyExW(HKEY_LOCAL_MACHINE, L"SOFTWARE\\Perl", 0, KEY_READ, &hKey);
bool bExistsAndSuccess (lRes == ERROR_SUCCESS);
bool bDoesNotExistsSpecifically (lRes == ERROR_FILE_NOT_FOUND);
std::wstring strValueOfBinDir;
std::wstring strKeyDefaultValue;
GetStringRegKey(hKey, L"BinDir", strValueOfBinDir, L"bad");
GetStringRegKey(hKey, L"", strKeyDefaultValue, L"bad");
LONG GetDWORDRegKey(HKEY hKey, const std::wstring &strValueName, DWORD &nValue, DWORD nDefaultValue)
{
nValue = nDefaultValue;
DWORD dwBufferSize(sizeof(DWORD));
DWORD nResult(0);
LONG nError = ::RegQueryValueExW(hKey,
strValueName.c_str(),
0,
NULL,
reinterpret_cast<LPBYTE>(&nResult),
&dwBufferSize);
if (ERROR_SUCCESS == nError)
{
nValue = nResult;
}
return nError;
}
LONG GetBoolRegKey(HKEY hKey, const std::wstring &strValueName, bool &bValue, bool bDefaultValue)
{
DWORD nDefValue((bDefaultValue) ? 1 : 0);
DWORD nResult(nDefValue);
LONG nError = GetDWORDRegKey(hKey, strValueName.c_str(), nResult, nDefValue);
if (ERROR_SUCCESS == nError)
{
bValue = (nResult != 0) ? true : false;
}
return nError;
}
LONG GetStringRegKey(HKEY hKey, const std::wstring &strValueName, std::wstring &strValue, const std::wstring &strDefaultValue)
{
strValue = strDefaultValue;
WCHAR szBuffer[512];
DWORD dwBufferSize = sizeof(szBuffer);
ULONG nError;
nError = RegQueryValueExW(hKey, strValueName.c_str(), 0, NULL, (LPBYTE)szBuffer, &dwBufferSize);
if (ERROR_SUCCESS == nError)
{
strValue = szBuffer;
}
return nError;
}
Nguồn
2008-08-30 05:51:31
Nếu vì một số lý do không giải thích được, điều này dường như không bao giờ tìm thấy khóa, đó có thể là vấn đề 32 bit/64 bit. Xem http://stackoverflow.com/q/15084380/482758 – mkjeldsen
Nó có thể được giúp đỡ để đề cập đến rằng mã của bạn được thiết kế để được sử dụng với những gì Windows gọi một bộ ký tự Unicode. Tôi sẽ thay đổi các chức năng gọi là 'RegOpenKeyExW' và 'RegQueryValueExW' thành" ký tự "tương đương với số nguyên" RegOpenKeyEx' và 'RegQueryValueEx' – HaMster
Unicode mặc định, nó sẽ chỉ thất bại nếu một số thay đổi rõ ràng dự án thành nhiều byte mà không có Lý do để làm – paulm