Windows API一日一练(65)RegQueryValueEx函数

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

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

给我老师的人工智能教程打call!http://blog.csdn.net/jiangjunshow

这里写图片描述

猜你喜欢

转载自blog.csdn.net/uytrrfg/article/details/83583185
今日推荐