国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

C++讀取注冊表的實現方法

2020-01-26 13:53:05
字體:
來源:轉載
供稿:網友

C++讀取注冊表

GetRegValue.h:

#ifndef __GETREGVALUE_H__#define __GETREGVALUE_H__#include <string>//---------------------------------------------------------------//function: //     GetRegValue 獲取注冊表中指定鍵的值//Access://      public //Parameter://     [in] int nKeyType - 注冊表項的類型,傳入的參數只可能是以下數值://               0:HKEY_CLASSES_ROOT//               1:HKEY_CURRENT_USER//               2:HKEY_LOCAL_MACHINE//               3:HKEY_USERS//               4:HKEY_PERFORMANCE_DATA//               5:HKEY_CURRENT_CONFIG//               6:HKEY_DYN_DATA//               7:HKEY_CURRENT_USER_LOCAL_SETTINGS//               8:HKEY_PERFORMANCE_TEXT//               9:HKEY_PERFORMANCE_NLSTEXT//     [in] const std::string & strUrl - 要查找 的鍵的路徑//     [in] const std::string & strKey - 指定的鍵//Returns://     std::string - 指定鍵的值//Remarks://     ...//author:  luoweifu//---------------------------------------------------------------std::string GetRegValue(int nKeyType, const std::string& strUrl, const std::string& strKey);//可移植版本 wstring => stringstd::string ws2s(const std::wstring& ws);//可移植版本 string => wstringstd::wstring s2ws(const std::string& s);#endif //__GETREGVALUE_H__

GetRegValue.cpp

#include "stdafx.h"#include <Windows.h>#include "GetRegValue.h"http://可移植版本 wstring => stringstd::string ws2s(const std::wstring& ws){  std::string curLocale = setlocale(LC_ALL, "");  const wchar_t* _Source = ws.c_str();  size_t _Dsize = wcstombs(NULL, _Source, 0) + 1;  char *_Dest = new char[_Dsize];  memset(_Dest,0,_Dsize);  wcstombs(_Dest,_Source,_Dsize);  std::string result = _Dest;  delete []_Dest;  setlocale(LC_ALL, curLocale.c_str());  return result;}//可移植版本 string => wstringstd::wstring s2ws(const std::string& s){  std::string curLocale = setlocale(LC_ALL, "");   const char* _Source = s.c_str();  size_t _Dsize = mbstowcs(NULL, _Source, 0) + 1;  wchar_t *_Dest = new wchar_t[_Dsize];  wmemset(_Dest, 0, _Dsize);  mbstowcs(_Dest,_Source,_Dsize);  std::wstring result = _Dest;  delete []_Dest;  setlocale(LC_ALL, curLocale.c_str());  return result;}std::string GetRegValue(int nKeyType, const std::string& strUrl, const std::string& strKey){  std::string strValue("");  HKEY hKey = NULL;  HKEY hKeyResult = NULL;  DWORD dwSize   = 0;  DWORD dwDataType = 0;  std::wstring wstrUrl = s2ws(strUrl);  std::wstring wstrKey = s2ws(strKey);  switch(nKeyType)  {  case 0:    {      hKey = HKEY_CLASSES_ROOT;      break;    }  case 1:    {      hKey = HKEY_CURRENT_USER;      break;    }  case 2:    {      hKey = HKEY_LOCAL_MACHINE;      break;    }  case 3:    {      hKey = HKEY_USERS;      break;    }  case 4:    {      hKey = HKEY_PERFORMANCE_DATA;      break;    }  case 5:    {      hKey = HKEY_CURRENT_CONFIG;      break;    }  case 6:    {      hKey = HKEY_DYN_DATA;      break;    }  case 7:    {      hKey = HKEY_CURRENT_USER_LOCAL_SETTINGS;      break;    }  case 8:    {      hKey = HKEY_PERFORMANCE_TEXT;      break;    }  case 9:    {      hKey = HKEY_PERFORMANCE_NLSTEXT;      break;    }  default:    {      return strValue;    }  }  //打開注冊表  if(ERROR_SUCCESS == ::RegOpenKeyEx(hKey, wstrUrl.c_str(), 0, KEY_QUERY_VALUE, &hKeyResult))  {    // 獲取緩存的長度dwSize及類型dwDataType    ::RegQueryValueEx(hKeyResult, wstrKey.c_str(), 0, &dwDataType, NULL, &dwSize);     switch (dwDataType)    {    case REG_MULTI_SZ:      {        //分配內存大小        BYTE* lpValue = new BYTE[dwSize];        //獲取注冊表中指定的鍵所對應的值        LONG lRet = ::RegQueryValueEx(hKeyResult, wstrKey.c_str(), 0, &dwDataType, lpValue, &dwSize);        delete[] lpValue;        break;      }    case REG_SZ:      {        //分配內存大小        wchar_t* lpValue = new wchar_t[dwSize];        memset(lpValue, 0, dwSize * sizeof(wchar_t));        //獲取注冊表中指定的鍵所對應的值        if (ERROR_SUCCESS == ::RegQueryValueEx(hKeyResult, wstrKey.c_str(), 0, &dwDataType, (LPBYTE)lpValue, &dwSize))        {          std::wstring wstrValue(lpValue);          strValue = ws2s(wstrValue);        }        delete[] lpValue;        break;      }    default:      break;    }  }  //關閉注冊表  ::RegCloseKey(hKeyResult);  return strValue;}

測試代碼:

#include "stdafx.h"#include <string>#include "GetRegValue.h"int _tmain(int argc, _TCHAR* argv[]){  std::string strValue = GetRegValue(2, "SOFTWARE//360Safe//Liveup", "mid");  return 0;}

結果:

strValue:

“ebd1360403764c9d48c585ef93a6eacbd89ded596f043f78e54eb0adeba7251d”

如有疑問請留言或者到本站社區交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 珲春市| 德安县| 黄浦区| 新巴尔虎左旗| 自贡市| 高邑县| 磐安县| 汕头市| 蓬溪县| 丽江市| 广宁县| 新沂市| 天祝| 新河县| 乐平市| 星子县| 鸡泽县| 两当县| 仙桃市| 塔河县| 大新县| 哈尔滨市| 贞丰县| 商都县| 普安县| 高清| 丹棱县| 比如县| 临汾市| 安丘市| 千阳县| 邯郸县| 本溪| 霍州市| 化德县| 红河县| 贵州省| 全南县| 油尖旺区| 四川省| 龙井市|