VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 1017|回复: 2

[交流] 获取不到注册表下某个项的值,格式化后为空,请教大家

[复制链接]
90_avatar_middle
最佳答案
0 
donate_vip 发表于 2020-9-16 13:54:05 | 显示全部楼层 |阅读模式
获取不到注册表下某个项的值,格式化后为空,请教大家
如上图,我想获取str下的地址”C:\......”。

我的代码如下:
获取不到注册表下某个项的值,格式化后为空,请教大家
  1.         //1.打开注册表
  2.         HKEY hKey = NULL;
  3.         long actExcl;
  4.         actExcl = RegOpenKey(HKEY_LOCAL_MACHINE, L"SOFTWARE\\DC", &hKey);
  5.         if (actExcl == ERROR_SUCCESS)
  6.         {
  7.                 MessageBox(L"打开成功!");
  8.         }
  9.         else
  10.         {
  11.                 MessageBox(L"打开失败!");
  12.         }

  13.         ////2.创建注册表
  14.         //actExcl = RegCreateKey(HKEY_LOCAL_MACHINE, L"SOFTWARE\\DC" ,&hKey);
  15.         //if (actExcl == ERROR_SUCCESS)
  16.         //{
  17.         //        MessageBox(L"创建成功!");
  18.         //}
  19.         //else
  20.         //{
  21.         //        MessageBox(L"创建失败!");
  22.         //}

  23.        
  24.         ////3.删除注册表
  25.         //actExcl = RegDeleteKey(HKEY_LOCAL_MACHINE, L"SOFTWARE\\DC");
  26.         //if (actExcl == ERROR_SUCCESS)
  27.         //{
  28.         //        MessageBox(L"删除成功!");
  29.         //}
  30.         //else
  31.         //{
  32.         //        MessageBox(L"删除失败!");
  33.         //}

  34.         //4.查询注册表
  35.         DWORD dwSubKeys , maxSubKeyLen , dwValueCount , maxValueNameLen , maxValueLen;
  36.         actExcl = RegQueryInfoKey(hKey, NULL, NULL, NULL, &dwSubKeys, &maxSubKeyLen, NULL, &dwValueCount, &maxValueNameLen, &maxValueLen, NULL, NULL);

  37.         //5.查询子键
  38.         DWORD dwNameLen = maxSubKeyLen+1;
  39.         TCHAR* pszName = new TCHAR[maxSubKeyLen + 1];
  40.         for (DWORD dwIndex = 0; dwIndex < dwSubKeys; dwIndex++)
  41.         {
  42.                 dwNameLen = 50;
  43.                 actExcl = RegEnumKeyEx(hKey, dwIndex, pszName, &dwNameLen, NULL, NULL, NULL, NULL);
  44.         }
  45.        
  46.         //6.查询子项
  47.         TCHAR * pszValue = new TCHAR[maxValueNameLen + 1];
  48.         for (DWORD dwIndex = 0; dwIndex < dwValueCount; dwIndex++)
  49.         {
  50.                 dwNameLen = 50;
  51.                 actExcl = RegEnumValue(hKey , dwIndex , pszValue , &dwNameLen , NULL , NULL , NULL , NULL);
  52.         }
  53.        

  54.         //以下是键值的操作
  55.         //7.查询键值
  56.         DWORD dwType = 0;
  57.         BYTE *ipData = new BYTE[maxValueNameLen + 1];
  58.         ZeroMemory(ipData, maxValueNameLen + 1);
  59.         actExcl = RegQueryValueEx(hKey, _T("str"), NULL, &dwType, ipData, &maxValueNameLen);
  60.         CString strValue;
  61.         strValue.Format(_T("%s"), CString(ipData));
  62.        



  63.         delete[]ipData;
  64.         delete[]pszValue;
  65.         delete[]pszName;
  66.         RegCloseKey(hKey);
复制代码



但是格式化输出后,为啥为空呢。




上一篇:今日一贴!禁止任务栏鼠标右键和恢复
下一篇:关于vc6怎么使用64位的动态链接库
70_avatar_middle
最佳答案
49 
在线会员 发表于 2020-9-16 16:07:31 | 显示全部楼层
没仔细看,但是64位系统下的32位程序 默认访问的是 HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node下的目录


  1. HKEY hKey;
  2. lRtn = RegOpenKeyEx(HKEY_LOCAL_MACHINE, szRegPath, 0,KEY_ALL_ACCESS | KEY_WOW64_64KEY, &hKey);
复制代码

试试
90_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2020-9-17 08:39:22 | 显示全部楼层
tony666 发表于 2020-9-16 16:07
没仔细看,但是64位系统下的32位程序 默认访问的是 HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node下的目录

...

谢谢大神,我解决了,结果是上面的代码错了。
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

×【发帖 友情提示】
1、请回复有意义的内容,请勿恶意灌水;
2、纯数字、字母、表情等无意义的内容系统将自动删除;
3、若正常回复后帖子被自动删除,为系统误删的情况,请重新回复其他正常内容或等待管理员审核通过后会自动发布;
4、感谢您对VC驿站一如既往的支持,谢谢合作!

关闭

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

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

GMT+8, 2023-9-28 02:03

Powered by CcTry.CoM

© 2009-2021 cctry.com

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