c++读取REG_MULTI_SZ类型注册表

First: run RegQueryValueEx to get type and necessary memory size:

Single byte code:

复制代码
 1 DWORD type, size;
 2 vector<string> target;
 3 if ( RegQueryValueExA(
 4     your_key, // HKEY
 5     TEXT("ValueName"),
 6     NULL,
 7     &type,
 8     NULL,
 9     &size ) != ERROR_SUCCESS )
10   return;
11 if ( type == REG_MULTI_SZ )
12 {
13   vector<char> temp(size);
14 
15   if ( RegQueryValueExA(
16       your_key, // HKEY
17       TEXT("ValueName"),
18       NULL,
19       NULL,
20       reinterpret_cast<LPBYTE>(&temp[0]),
21       &size ) != ERROR_SUCCESS )
22   return;
23 
24   size_t index = 0;
25   size_t len = strlen( &temp[0] );
26   while ( len > 0 )
27   {
28     target.push_back(&temp[index]);
29     index += len + 1;
30     len = strlen( &temp[index] );
31   }
32 }
复制代码

 

Unicode:

复制代码
 1 DWORD type, size;
 2 vector<wstring> target;
 3 if ( RegQueryValueExW(
 4     your_key, // HKEY
 5     TEXT("ValueName"),
 6     NULL,
 7     &type,
 8     NULL,
 9     &size ) != ERROR_SUCCESS )
10   return;
11 if ( type == REG_MULTI_SZ )
12 {
13   vector<wchar_t> temp(size/sizeof(wchar_t));
14 
15   if ( RegQueryValueExW(
16       your_key, // HKEY
17       TEXT("ValueName"),
18       NULL,
19       NULL,
20       reinterpret_cast<LPBYTE>(&temp[0]),
21       &size ) != ERROR_SUCCESS )
22   return;
23 
24   size_t index = 0;
25   size_t len = wcslen( &temp[0] );
26   while ( len > 0 )
27   {
28     target.push_back(&temp[index]);
29     index += len + 1;
30     len = wcslen( &temp[index] );
31   }
32 }
复制代码

 

posted @   davygeek  阅读(2007)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
历史上的今天:
2015-03-17 【转】常用服务器模型总结
点击右上角即可分享
微信分享提示