C/C++注册表【4】键值的获取,设置,删除,枚举

1、键值的获取:

LONG WINAPI RegQueryValueEx(HKEY hKey,            //一个已打开项的句柄,或者指定一个标准项名LPCTSTR lpValueName,  // 要获取值的名字LPDWORD lpReserved,   // 未用,设为零LPDWORD lpType,       // 用于装载取回数据类型的一个变量LPBYTE lpData,        // 用于装载指定值的一个缓冲区LPDWORD lpcbData      // 用于装载lpData缓冲区长度的一个变量。一旦返回,它会设为实际装载到缓冲区的字节数
);

返回值 Long,零(ERROR_SUCCESS)表示成功。其他任何值都代表一个错误代码

MSDN介绍:https://docs.microsoft.com/zh-cn/windows/desktop/api/winreg/nf-winreg-regdeletevaluea

lpValueName 指向要查询值的名字的字符串(以空字符结束)。 如果lpValueName是NULL或一个空字符串(""),这个函数找回这个键的未命名或默认值的类型和数据。 Windows 95和Windows 98: 每个键有一个默认值(最初的不包含数据)。在Windows 95,这人默认值类型总是REG_SZ。在Windows 98,默认键的类型最初是REG_SZ,但可以通过RegSetValueEx指定一个默认值为不同的类型。

实例:

void CTestDlg::OnBnClickedOk()
{// TODO: 在此添加控件通知处理程序代码HKEY hKey = NULL;TCHAR *lpszSubKey = _T("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run");LONG lRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE, lpszSubKey, 0, KEY_ALL_ACCESS, &hKey);if (lRet == ERROR_SUCCESS) {DWORD dwValueCount = 0, maxValueNameLen = 0, maxValueDataLen = 0;lRet = RegQueryInfoKey(hKey, NULL, NULL, NULL, NULL, NULL, NULL, &dwValueCount, &maxValueNameLen, &maxValueDataLen, NULL, NULL);if (lRet == ERROR_SUCCESS) {DWORD dwType = 0;BYTE *lpData = new BYTE[maxValueDataLen + 1];ZeroMemory(lpData, maxValueDataLen + 1);lRet = RegQueryValueEx(hKey, _T("360Safetray"), NULL, &dwType, lpData, &maxValueDataLen);CString strValue;strValue.Format(_T("%s"), lpData);MessageBox(strValue);delete[] lpData;}RegCloseKey(hKey);}CDialogEx::OnOK();
}

2、键值设置:

RegSetValueEx函数可以设置注册表中键的值,函数原型如下:

  LONG RegSetValueEx(HKEY hKey,      //主键值LPCTSTR lpValueName,  //参数lpValueName为一个指向包含值名的字符串指针。DWORD Reserved,       //Reserved保留,通常必须设置为0DWORD dwType,         //参数dwType确定了设置的值的类型同RegQueryValueKeyEx的lyType参数。CONST BYTE *lpData,  //参数lpData为一个指向包含数据的缓冲区的指针DWORD cbData           //参数cbData以字节为单位,指定数据的长度);

返回值 Long,零(ERROR_SUCCESS)表示成功。其他任何值都代表一个错误代码

实例:


void CTestDlg::OnBnClickedOk()
{// TODO: 在此添加控件通知处理程序代码HKEY hKey = NULL;TCHAR *lpszSubKey = _T("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run");LONG lRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE, lpszSubKey, 0, KEY_ALL_ACCESS, &hKey);if (lRet == ERROR_SUCCESS) {CString strPath = _T("F:\\工具\\fildder\\Fiddler\\Fiddler.exe");RegSetValueEx(hKey, _T("GP_CLT_JIT"), 0, REG_SZ, (LPBYTE)strPath.GetBuffer(), strPath.GetLength() * sizeof(TCHAR));RegCloseKey(hKey);}CDialogEx::OnOK();
}

3、键值的删除:RegDeleteValue

LSTATUS RegDeleteValueA(HKEY   hKey,LPCSTR lpValueName
);

void CTestDlg::OnBnClickedOk()
{// TODO: 在此添加控件通知处理程序代码HKEY hKey = NULL;TCHAR *lpszSubKey = _T("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run");LONG lRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE, lpszSubKey, 0, KEY_ALL_ACCESS, &hKey);if (lRet == ERROR_SUCCESS) {RegDeleteValue(hKey, _T("TestRun"));RegCloseKey(hKey);}CDialogEx::OnOK();
}

4、键值的枚举操作:RegEnumValue

RegEnumValue(hkey,        //被枚举的键句柄dwIndex,    //子键索引编号lpValueName,    //键值名称lpcbValueName,    //键值名称长度lpReserved,    //系统保留,指定为0lpType,        //键值数据类型lpDate,        //键值数据lpcbDate    //键值数据长度);

实例:

void CTestDlg::OnBnClickedOk()
{// TODO: 在此添加控件通知处理程序代码HKEY hKey = NULL;TCHAR *lpszSubKey = _T("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run");LONG lRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE, lpszSubKey, 0, KEY_ALL_ACCESS, &hKey);if (lRet == ERROR_SUCCESS) {DWORD dwValueCount = 0, maxValueNameLen = 0, maxValueDataLen = 0;lRet = RegQueryInfoKey(hKey, NULL, NULL, NULL, NULL, NULL, NULL, &dwValueCount, &maxValueNameLen, &maxValueDataLen, NULL, NULL);if (lRet == ERROR_SUCCESS) {DWORD dwNameLen = maxValueNameLen + 1;TCHAR *pszName = new TCHAR[dwNameLen];DWORD dwType = 0;DWORD dwValueDataLen = maxValueDataLen + 1;BYTE *lpValueData = new BYTE[dwValueDataLen];for (DWORD dwIndex = 0; dwIndex < dwValueCount; ++dwIndex) {dwNameLen = maxValueNameLen + 1;ZeroMemory(pszName, dwNameLen);dwValueDataLen = maxValueDataLen + 1;ZeroMemory(lpValueData, dwValueDataLen);lRet = RegEnumValue(hKey, dwIndex, pszName, &dwNameLen, NULL, &dwType, lpValueData, &dwValueDataLen);//Other operationsCString strValueName;strValueName.Format(_T("%s"), pszName);MessageBox(strValueName);           //子键名称CString strValueData;strValueData.Format(_T("%s"), lpValueData);MessageBox(strValueData);           //子键的value}delete[] pszName;delete[] lpValueData;RegCloseKey(hKey);}}CDialogEx::OnOK();
}

声明:本代码参考部分VC驿站教程。

C/C++注册表【4】键值的获取,设置,删除,枚举相关推荐

  1. 注册表各键值保存的内容及其对用的作用(功能)(不完善,有补充的评论指出供大家学习参考)

    从Windows 95开始,Microsoft在Windows中引入了注册表(英文为REGISTRY)的概念(实际上原来在Windows NT中已有此概念).注册表是Windows 95及Window ...

  2. C#获取注册表指定键值

    某些程序必须依赖指定运行环境.那么读取注册表来判断此电脑是否有执行环境是个很不错的办法.因为每个软件安装之后都会在注册表中注册对应的键值,并且有些键值是独一无二的.那么首先就需要找到那个具体的独一无二 ...

  3. # 删除注册表项键值_强制删除:让你的电脑上不再有“顽固”程序

    微信搜一搜麦克NO1对于很多用户来说,在日常使用电脑的时候,经常会有意无意的安装一些程序.而这些程序也是严重影响了电脑的运行速度.所以,在忍无可忍的情况下,需要将这些"顽固"程序卸 ...

  4. [C++]用VC++来设置获得注册表的键值(问题解决)

    下面这个是基于MFC的基本对话写的..  演示设置注册表的3中类型的值和获得注册表的3中类型的值.. 分别用RegSetValueEx()来设置,RegQueryValueEx()函数来获得. voi ...

  5. java读取注册表_Java通过CMD方式读取注册表任意键值对代码实践

    需要读取如图所示注册表[HKEY_LOCAL_MACHINE\SOFTWARE\EasyDrv7]节点下的[DateTime]的值 直接上代码: package com.beibei.common.u ...

  6. windows注册表几大键值

    什么是注册表?  从Windows 95开始,Microsoft在Windows中引入了注册表(英文为REGISTRY)的概念(实际上原来在Windows NT中已有此概念).注册表是Windows ...

  7. 批量删除注册表特定键值的小技巧

    今天使用虚拟机的时候发现了一个小的问题,我的ubunto需要使用18.04,但是我用的虚拟机是版本12的,不能正常加载,但是在别人的电脑上就能成功,看他们的版本是15.0的所以我也想吧我的虚拟机升级到 ...

  8. js读取注册表的键值

    try { var shell = new ActiveXObject("WScript.Shell"); --读取注册表 var  key  = shell.RegRead(&q ...

  9. delphi 注册表操作之(读取、添加、删除、修改)

    32位Delphi程序中可利用TRegistry对象来存取注册表文件中的信息. 一.创建和释放TRegistry对象 1.创建TRegistry对象.为了操作注册表,要创建一个TRegistry对象: ...

最新文章

  1. 审稿人眼中的好论文到底长什么样?
  2. linux 下 C 编程和make的方法 (十、C版的try catch 捕捉段错误和异常处理)
  3. MySQL Replication 主从复制全方位解决方案
  4. Shell教程(六):函数、联机帮助
  5. 《高效能人士的七个习惯》
  6. qt 下log4cplus的使用
  7. react封装函数_React 模式-将函数作为 children 传入和 render prop - 极客教程
  8. 14款荣耀/华为机型获版本升级: 适配FlyPods Pro骨声纹识别
  9. 计算机做镜像步骤,如何将当前的操作系统做成镜像?
  10. 'GO' 附近有语法错误问题,我真是无语~
  11. urllib.error.URLError: <urlopen error [SSL: WRONG_VERSION_NUMBER] wrong version number 成功解决
  12. React:Hook
  13. RS232串口转USB驱动无法正确识别
  14. sys caffe教程
  15. 如何将html页面打印出来,网页太长如何全部打印_怎样打印整个网页内容-win7之家...
  16. 光模块发射光功率和接收灵敏度介绍
  17. LR参数化,参数化类型:Fille类型--参数分配与取值规律
  18. EDM邮件营销的背景和市场分析
  19. Photoshop 快捷键设置之进化
  20. 4成药企要退出,他们的药代知道吗?

热门文章

  1. 不能更新,数据库或对象为只读
  2. 智能家居带动智能消费应用 未来发展到智慧小区及智慧城市
  3. FMEA软件——聊聊FMEA那些事
  4. 计算机机房如何批量重装,全自动网刻工具 — 机房批量安装系统必备
  5. 2021数据科学平台领域最具商业合作价值企业盘点
  6. Vscode+MobaXterm跨平台开发
  7. Exoplayer学习笔记1——使用方法
  8. Linux运维网络基础
  9. 【Joy of Cryptography 读书笔记】Chapter 1 一次性密码本(one-time pad)Kerckhoffs原则
  10. 为您的 Vue.js 应用程序选择最佳电子商务平台