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

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

2008-04-08 23:41 477 查看
上一次介绍怎么样保存数据到注册表里,这次就需要从注册表里读取数据出来了。在这个例子里是读取字符串数据出来,主要调用函数RegQueryValueEx来实现。下面的例子里就是先查询键值的长度,然后再读取内容出来。 函数RegQueryValueEx声明如下: WINADVAPILONGAPIENTRYRegQueryValueExA (    __in HKEY hKey,    __in_opt LPCSTR lpValueName,    __reserved LPDWORD lpReserved,    __out_opt LPDWORD lpType,    __out_bcount_opt(*lpcbData) LPBYTE lpData,    __inout_opt LPDWORD lpcbData    );WINADVAPILONGAPIENTRYRegQueryValueExW (    __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  } 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: