上一次介紹怎麼樣儲存資料到註冊表裡,這次就需要從註冊表裡讀取資料出來了。在這個例子裡是讀取字串資料出來,主要調用函數RegQueryValueEx來實現。下面的例子裡就是先查詢索引值的長度,然後再讀取內容出來。
函數RegQueryValueEx聲明如下:
WINADVAPI
LONG
APIENTRY
RegQueryValueExA (
__in HKEY hKey,
__in_opt LPCSTR lpValueName,
__reserved LPDWORD lpReserved,
__out_opt LPDWORD lpType,
__out_bcount_opt(*lpcbData) LPBYTE lpData,
__inout_opt LPDWORD lpcbData
);
WINADVAPI
LONG
APIENTRY
RegQueryValueExW (
__in HKEY hKey,
__in_opt LPCWSTR lpValueName,
__reserved LPDWORD lpReserved,
__out_opt LPDWORD lpType,
__out_bcount_opt(*lpcbData) LPBYTE lpData,
__inout_opt LPDWORD lpcbData
);
#ifdef UNICODE
#define RegQueryValueEx RegQueryValueExW
#else
#define RegQueryValueEx RegQueryValueExA
#endif // !UNICODE
hKey是主鍵。
lpValueName是索引值名稱。
lpType是類型。
lpData是讀出來資料儲存地方。
lpcbData是讀取資料多少。
調用函數的例子如下:
#001 //打註冊表傳回值。HKEY_CURRENT_USER/"Software"/"Wincpp"/"testreg"
#002 // /"Windows"//"winsize" = "800*600"
#003 //蔡軍生 2007/11/05 QQ:9073204 深圳
#004 std::wstring GetProfileString(LPCTSTR lpszSection, LPCTSTR lpszEntry,
#005 LPCTSTR lpszDefault)
#006 {
#007 //開啟應用程式鍵。
#008 HKEY hAppKey = GetAppRegistryKey();
#009 if (hAppKey == NULL)
#010 {
#011 return lpszDefault;
#012 }
#013
#014 HKEY hSecKey = NULL;
#015 DWORD dw;
#016
#017 //開啟子鍵。
#018 RegCreateKeyEx(hAppKey, lpszSection, 0, REG_NONE,
#019 REG_OPTION_NON_VOLATILE, KEY_WRITE|KEY_READ, NULL,
#020 &hSecKey, &dw);
#021 RegCloseKey(hAppKey);
#022
#023 if (hSecKey == NULL)
#024 {
#025 return lpszDefault;
#026 }
#027
#028 //查詢索引值。
#029 std::wstring strValue;
#030 DWORD dwType=REG_NONE;
#031 DWORD dwCount=0;
#032
#033 //先查詢索引值的長度。
#034 LONG lResult = RegQueryValueEx(hSecKey, (LPTSTR)lpszEntry, NULL, &dwType,
#035 NULL, &dwCount);
#036 if (lResult == ERROR_SUCCESS)
#037 {
#038 strValue.resize(dwCount);
#039
#040 //查詢索引值。
#041 lResult = RegQueryValueEx(hSecKey, (LPTSTR)lpszEntry, NULL, &dwType,
#042 (LPBYTE)strValue.data(), &dwCount);
#043
#044 }
#045
#046 RegCloseKey(hSecKey);
#047 if (lResult == ERROR_SUCCESS)
#048 {
#049 return strValue;
#050 }
#051
#052 return lpszDefault;
#053 }