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 }

 

转载于:https://www.cnblogs.com/davygeek/p/5286193.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值