日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

c 语言读取注册表信息,C++读取注册表的实现方法

發(fā)布時(shí)間:2023/11/30 c/c++ 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c 语言读取注册表信息,C++读取注册表的实现方法 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

C++讀取注冊(cè)表

GetRegValue.h:

#ifndef __GETREGVALUE_H__

#define __GETREGVALUE_H__

#include

//---------------------------------------------------------------

//function:

// GetRegValue 獲取注冊(cè)表中指定鍵的值

//Access:

// public

//Parameter:

// [in] int nKeyType - 注冊(cè)表項(xiàng)的類型,傳入的參數(shù)只可能是以下數(shù)值:

// 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 => string

std::string ws2s(const std::wstring& ws);

//可移植版本 string => wstring

std::wstring s2ws(const std::string& s);

#endif //__GETREGVALUE_H__

GetRegValue.cpp

#include "stdafx.h"

#include

#include "GetRegValue.h"

//可移植版本 wstring => string

std::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 => wstring

std::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;

}

}

//打開注冊(cè)表

if(ERROR_SUCCESS == ::RegOpenKeyEx(hKey, wstrUrl.c_str(), 0, KEY_QUERY_VALUE, &hKeyResult))

{

// 獲取緩存的長(zhǎng)度dwSize及類型dwDataType

::RegQueryValueEx(hKeyResult, wstrKey.c_str(), 0, &dwDataType, NULL, &dwSize);

switch (dwDataType)

{

case REG_MULTI_SZ:

{

//分配內(nèi)存大小

BYTE* lpValue = new BYTE[dwSize];

//獲取注冊(cè)表中指定的鍵所對(duì)應(yīng)的值

LONG lRet = ::RegQueryValueEx(hKeyResult, wstrKey.c_str(), 0, &dwDataType, lpValue, &dwSize);

delete[] lpValue;

break;

}

case REG_SZ:

{

//分配內(nèi)存大小

wchar_t* lpValue = new wchar_t[dwSize];

memset(lpValue, 0, dwSize * sizeof(wchar_t));

//獲取注冊(cè)表中指定的鍵所對(duì)應(yīng)的值

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;

}

}

//關(guān)閉注冊(cè)表

::RegCloseKey(hKeyResult);

return strValue;

}

測(cè)試代碼:

#include "stdafx.h"

#include

#include "GetRegValue.h"

int _tmain(int argc, _TCHAR* argv[])

{

std::string strValue = GetRegValue(2, "SOFTWARE\\360Safe\\Liveup", "mid");

return 0;

}

結(jié)果:

strValue:

“ebd1360403764c9d48c585ef93a6eacbd89ded596f043f78e54eb0adeba7251d”

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

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

總結(jié)

以上是生活随笔為你收集整理的c 语言读取注册表信息,C++读取注册表的实现方法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。