国产探花免费观看_亚洲丰满少妇自慰呻吟_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”

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 信阳市| 故城县| 额敏县| 文登市| 祁阳县| 招远市| 汤原县| 和平区| 闽清县| 张掖市| 舞钢市| 楚雄市| 奇台县| 新竹县| 桃园市| 台山市| 陵水| 资源县| 云阳县| 定远县| 亚东县| 建宁县| 双柏县| 海晏县| 富锦市| 黄平县| 安泽县| 湖州市| 遂宁市| 安康市| 噶尔县| 江永县| 濉溪县| 绩溪县| 米脂县| 临清市| 额敏县| 晋城| 德清县| 深州市| 金湖县|