C++读写注册表、获取子项

阅读: 评论:0

C++读写注册表、获取子项

C++读写注册表、获取子项

//读注册表

std::wstring GetRegValue(HKEY hKeyType, DWORD dwType, LPCTSTR lpPath, LPCTSTR lpName)
{HKEY hKEY;DWORD dataSize = MAX_PATH;char data[MAX_PATH];std::string strValue("");if (RegOpenKeyEx(hKeyType, lpPath, NULL, KEY_READ, &hKEY) == ERROR_SUCCESS)        //如果无法打开hKEY,则中止程序的执行  {long lRet = RegQueryValueEx(hKEY, lpName, NULL, &dwType, (LPBYTE)data, &dataSize);if (lRet == ERROR_SUCCESS){for (int i = 0; i < (int)dataSize; i++){strValue = strValue + data[i];}}RegCloseKey(hKEY);        // 程序结束前要关闭已经打开的 hKEY。}else{RegCreateKeyEx(hKeyType, (LPCTSTR)lpPath, 0, NULL, NULL, KEY_WRITE, NULL, &hKEY, NULL);RegCloseKey(hKEY);        // 程序结束前要关闭已经打开的 hKEY。}std::wstring wstrValue((wchar_t*)strValue.data(), strValue.length() / 2);return wstrValue;
}
eg:
std::wstring strValue;				
strValue = GetRegValue(HKEY_LOCAL_MACHINE, REG_SZ, L"SoftWare\Microsoft\Windows\CurrentVersion\App Paths\WebService", L"WebServiceIP");

//写注册表

void WriteRegedit(LPCTSTR m_path, LPCTSTR m_name, CString strParame)
{HKEY hKEY;if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, m_path, NULL, KEY_WRITE, &hKEY) == ERROR_SUCCESS)        //如果无法打开hKEY,则中止程序的执行  {RegSetValueEx(hKEY, m_name, NULL, REG_SZ, (BYTE*)strParame.GetBuffer(strParame.GetLength()), 2 * strParame.GetLength());strParame.ReleaseBuffer();RegCloseKey(hKEY);}else{RegCreateKeyEx(HKEY_LOCAL_MACHINE, (LPCTSTR)m_path, 0, NULL, NULL, KEY_WRITE, NULL, &hKEY, NULL);RegSetValueEx(hKEY, m_name, NULL, REG_SZ, (BYTE*)strParame.GetBuffer(strParame.GetLength()), 2 * strParame.GetLength());strParame.ReleaseBuffer();RegCloseKey(hKEY);}
}
eg:
m_RegInfo.WriteRegedit(_T("SoftWare\Microsoft\Windows\CurrentVersion\App Paths\WebService"), _T("WebServiceIP"), _T("192.168.0.0"));

//获取注册表子项的代码
以下部分内容转自:

//QueryKey - Enumerates the subkeys of key and its associated values.
//hKey - Key whose subkeys and values are to be enumerated.
#include <windows.h>
#include <stdio.h>
#include <tchar.h>
#define MAX_KEY_LENGTH 255
#define MAX_VALUE_NAME 16383
//枚举一个键的子键和子键的值
void QueryKey(HKEY hKey)
{TCHAR    achKey[MAX_KEY_LENGTH];   // buffer for subkey nameDWORD    cbName;                   // size of name string TCHAR    achClass[MAX_PATH] = TEXT("");  // buffer for class name DWORD    cchClassName = MAX_PATH;  // size of class string DWORD    cSubKeys = 0;               // number of subkeys DWORD    cbMaxSubKey;              // longest subkey size DWORD    cchMaxClass;              // longest class string DWORD    cValues;              // number of values for key DWORD    cchMaxValue;          // longest value name DWORD    cbMaxValueData;       // longest value data DWORD    cbSecurityDescriptor; // size of security descriptor FILETIME ftLastWriteTime;      // last write time DWORD i, retCode;TCHAR  achValue[MAX_VALUE_NAME];DWORD cchValue = MAX_VALUE_NAME;// Get the class name and the value count. retCode = RegQueryInfoKey(hKey,                    // key handle achClass,                // buffer for class name &cchClassName,           // size of class string NULL,                    // reserved &cSubKeys,               // number of subkeys &cbMaxSubKey,            // longest subkey size &cchMaxClass,            // longest class string &cValues,                // number of values for this key &cchMaxValue,            // longest value name &cbMaxValueData,         // longest value data &cbSecurityDescriptor,   // security descriptor &ftLastWriteTime);       // last write time // Enumerate the subkeys, until RegEnumKeyEx fails.//枚举子项if (cSubKeys){//printf("nNumber of subkeys: %dn", cSubKeys);for (i = 0; i < cSubKeys; i++){cbName = MAX_KEY_LENGTH;retCode = RegEnumKeyEx(hKey, i,achKey,&cbName,NULL,NULL,NULL,&ftLastWriteTime);if (retCode == ERROR_SUCCESS){_tprintf(TEXT("(%d) %sn"), i + 1, achKey);//achKey子项的名称			}}}// Enumerate the key values.// 枚举键值if (cValues){printf("nNumber of values: %dn", cValues);for (i = 0, retCode = ERROR_SUCCESS; i < cValues; i++){cchValue = MAX_VALUE_NAME;achValue[0] = '';retCode = RegEnumValue(hKey, i,achValue,&cchValue,NULL,NULL,NULL,NULL);if (retCode == ERROR_SUCCESS){_tprintf(TEXT("(%d) %sn"), i + 1, achValue);}}}
}

//调用部分

void main()
{HKEY hTestKey;if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, TEXT("SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths"),0, KEY_READ, &hTestKey) == ERROR_SUCCESS){QueryKey(hTestKey, vecSubkeyName);}RegCloseKey(hTestKey);
}

本文发布于:2024-02-01 07:06:27,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170674238734768.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:注册表
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23