VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

有编程疑问吗?还请到提问专区发帖提问!
搜索
查看: 213|回复: 0

VC++高级班之注册表篇-[3]注册表中键值的相关操作

[复制链接]
51_avatar_middle
online_admins Syc 发表于 2018-3-23 00:44:13 | 显示全部楼层 |阅读模式
①、键值信息的获取:RegQueryValueEx
方式一:
  1. HKEY hKey = NULL;
  2. TCHAR *lpszSubKey = _T("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run");
  3. LONG lRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE, lpszSubKey, 0, KEY_ALL_ACCESS, &hKey);
  4. if (lRet == ERROR_SUCCESS) {
  5.         DWORD dwValueCount = 0, maxValueNameLen = 0, maxValueDataLen = 0;
  6.         lRet = RegQueryInfoKey(hKey, NULL, NULL, NULL, NULL, NULL, NULL, &dwValueCount, &maxValueNameLen, &maxValueDataLen, NULL, NULL);
  7.         if (lRet == ERROR_SUCCESS) {
  8.                 DWORD dwType = 0;
  9.                 BYTE *lpData = new BYTE[maxValueDataLen+1];
  10.                 ZeroMemory(lpData, maxValueDataLen+1);
  11.                 lRet = RegQueryValueEx(hKey, _T("Edifier.EasyVOL"), NULL, &dwType, lpData, &maxValueDataLen);

  12.                 CString strValue;
  13.                 strValue.Format(_T("%s"), lpData);
  14.                 MessageBox(strValue);
  15.                 delete [] lpData;
  16.         }
  17.         RegCloseKey(hKey);
  18. }
复制代码


方式二:
  1. HKEY hKey = NULL;
  2. TCHAR *lpszSubKey = _T("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run");
  3. LONG lRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE, lpszSubKey, 0, KEY_ALL_ACCESS, &hKey);
  4. if (lRet == ERROR_SUCCESS) {
  5.         DWORD dwType = 0, dwDataLen = 0;
  6.         BYTE *lpData = NULL;
  7.         lRet = RegQueryValueEx(hKey, _T("Edifier.EasyVOL"), NULL, &dwType, NULL, &dwDataLen);
  8.         lpData = new BYTE[dwDataLen+1];
  9.         ZeroMemory(lpData, dwDataLen+1);
  10.         lRet = RegQueryValueEx(hKey, _T("Edifier.EasyVOL"), NULL, &dwType, lpData, &dwDataLen);
  11.         RegCloseKey(hKey);

  12.         CString strValue;
  13.         strValue.Format(_T("%s"), lpData);
  14.         MessageBox(strValue);
  15.         delete [] lpData;
  16. }
复制代码

===================================================
②、键值信息的设置:RegSetValueEx
  1. HKEY hKey = NULL;
  2. TCHAR *lpszSubKey = _T("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run");
  3. LONG lRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE, lpszSubKey, 0, KEY_ALL_ACCESS, &hKey);
  4. if (lRet == ERROR_SUCCESS) {
  5.         CString strPath = _T("D:\\Program Files\\SoftWare\\123.exe");
  6.         RegSetValueEx(hKey, _T("Edifier.EasyVOL"), 0, REG_SZ, (LPBYTE)strPath.GetBuffer(), strPath.GetLength()*sizeof(TCHAR));

  7.         strPath = _T("G:\\VMWare\\CentOS\\abc.exe");
  8.         RegSetValueEx(hKey, _T("TestRun"), 0, REG_SZ, (LPBYTE)strPath.GetBuffer(), strPath.GetLength()*sizeof(TCHAR));
  9.         RegCloseKey(hKey);
  10. }
复制代码

===================================================
③、键值的删除:RegDeleteValue
  1. HKEY hKey = NULL;
  2. TCHAR *lpszSubKey = _T("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run");
  3. LONG lRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE, lpszSubKey, 0, KEY_ALL_ACCESS, &hKey);
  4. if (lRet == ERROR_SUCCESS) {
  5.         RegDeleteValue(hKey, _T("TestRun"));
  6.         RegCloseKey(hKey);
  7. }
复制代码

===================================================
④、键值的枚举操作:RegEnumValue
  1. HKEY hKey = NULL;
  2. TCHAR *lpszSubKey = _T("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run");
  3. LONG lRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE, lpszSubKey, 0, KEY_ALL_ACCESS, &hKey);
  4. if (lRet == ERROR_SUCCESS) {
  5.         DWORD dwValueCount = 0, maxValueNameLen = 0, maxValueDataLen = 0;
  6.         lRet = RegQueryInfoKey(hKey, NULL, NULL, NULL, NULL, NULL, NULL, &dwValueCount, &maxValueNameLen, &maxValueDataLen, NULL, NULL);
  7.         if (lRet == ERROR_SUCCESS) {
  8.                 DWORD dwNameLen = maxValueNameLen+1;
  9.                 TCHAR *pszName = new TCHAR[dwNameLen];

  10.                 DWORD dwType = 0;
  11.                 DWORD dwValueDataLen = maxValueDataLen+1;
  12.                 BYTE *lpValueData = new BYTE[dwValueDataLen];

  13.                 for (DWORD dwIndex = 0; dwIndex < dwValueCount; ++dwIndex) {
  14.                         dwNameLen = maxValueNameLen+1;
  15.                         ZeroMemory(pszName, dwNameLen);

  16.                         dwValueDataLen = maxValueDataLen+1;
  17.                         ZeroMemory(lpValueData, dwValueDataLen);

  18.                         lRet = RegEnumValue(hKey, dwIndex, pszName, &dwNameLen, NULL, &dwType, lpValueData, &dwValueDataLen);
  19.                         //Other operations
  20.                         CString strValueData;
  21.                         strValueData.Format(_T("%s"), lpValueData);
  22.                 }
  23.                 delete [] pszName;
  24.                 delete [] lpValueData;
  25.                 RegCloseKey(hKey);
  26.         }
  27. }
复制代码

===================================================
※※※ 小作业:自己试着做一款开机启动项查询工具
------------------------------------- End -------------------------------------------

相关课程演示细节还请观看视频教程!
本套教程由VC驿站原创,提供视频教程+售后答疑服务!
教程介绍及详情请见:http://www.cctry.com/static/vip/index.html
VC驿站Vip会员详情请见:http://www.cctry.com/static/vip/index.html




上一篇:VC++高级班之注册表篇-[2]注册表中键的相关操作
下一篇:VC++高级班之注册表篇-[4]其他类型键值的设置

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

关闭

站长提醒上一条 /1 下一条

QQ
QQ在线咨询
联系电话
13591366679
手机扫一扫 关注本站精彩内容
wxqrcode

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号tongdun|网站地图wx_jqr

GMT+8, 2018-10-22 19:15

Powered by Discuz! X3.4

© 2009-2018 cctry.com

快速回复 返回顶部 返回列表