您的位置:首页 > 产品设计 > UI/UE

RegQueryValueEx函数

2016-06-23 07:42 417 查看
上一次介绍怎么样保存数据到注册表里,这次就需要从注册表里读取数据出来了。在这个例子里是读取字符串数据出来,主要调用函数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  //

#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  }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: