现在的位置: 首页 > 综合 > 正文

VC遍历注册表

2013年02月12日 ⁄ 综合 ⁄ 共 1787字 ⁄ 字号 评论关闭

最近在学习windows api编程,做些笔记,虽然有些东西不是很懂,但还是学会用吧,用多了就会熟的

使用到的函数

1、RegOpenKeyEx

2、RegQueryKeyInfo
3、RegEnumKeyEx

4、RegEnumValue

源代码如下:

#include <windows.h>
#include <stdio.h>


int main()
{
HKEY hKey = NULL;
if (!RegOpenKeyEx(HKEY_CURRENT_USER,"Software",0,KEY_READ | KEY_WRITE,&hKey) == ERROR_SUCCESS)
{
printf("打开注册表失败!\n");
return -1;
}


char  szClassname[255];//类名
DWORD dwClassnameLength;//装载类名缓冲区的长度            
DWORD dwsubsum;//保存这个项的子项数量
DWORD dwMaxSubKeyLen;//装载这个项最长一个子项的长度 
DWORD dwMaxClassLen;//装载这个项之子项的最长一个类名的长度  
DWORD dwValues;//用于装载这个项的设置值数量的一个变量
DWORD dwMaxValueNameLen;//装载这个项之子项的最长一个值名的长度        
DWORD dwMaxValueLen;//装载容下这个项最长一个值数据所需的缓冲区长度               
DWORD dwSecurityDescriptor;//装载值安全描述符长度的一个变量      
FILETIME strftLastWriteTime;//指定一个结构,用于容纳该项的上一次修改时间

// 获取类名和数量
DWORD dwret = RegQueryInfoKey(
hKey,                    // 键的句柄
szClassname,             //  类名 
&dwClassnameLength,      // 类名长度 
NULL,                    // 保留
&dwsubsum,               // 子键的数量
&dwMaxSubKeyLen,         // 子键长度
&dwMaxClassLen,          // 类长度
&dwValues,               // 子键键值数量
&dwMaxValueNameLen,      // 子键名长度
&dwMaxValueLen,          // 键值长度
&dwSecurityDescriptor,   // 安全描述符
&strftLastWriteTime);    // 最后写时间 

char szKeyvalue[255];
DWORD dwKeyvalueLen;
// 列举子键    
if (dwsubsum != 0)
{
printf( "子键的数量为: %d\n", dwsubsum);

for (int i=0; i<dwsubsum; i++) 
{ 
memset(szKeyvalue,0,sizeof(szKeyvalue));
dwKeyvalueLen = 255;
dwret = RegEnumKeyEx(
hKey, 
i,//欲获取的子项的索引。第一个子项的索引编号为零
szKeyvalue,//用于装载指定索引处项名的一个缓冲区
&dwKeyvalueLen, //装载szKeyvalue的实际长度
NULL, 
NULL, 
NULL, 
&strftLastWriteTime); 
if (dwret == ERROR_SUCCESS) 
{
printf("(%d)----- %s\n", i+1, szKeyvalue);
}
}
} 

char szSubKeyvalue[255] = {0};
DWORD dwSubKeyvalueLen;
// 列举键值
if (dwValues != 0) 
{
printf( "子键键值数量为: %d\n", dwValues);

for (int i=0, dwret=ERROR_SUCCESS; i<dwValues; i++) 
{
memset(szSubKeyvalue,0,sizeof(szSubKeyvalue));
dwSubKeyvalueLen = 255;
dwret = RegEnumValue(
hKey, 
i, //注意第一个值的索引编号为零
szSubKeyvalue, 
&dwSubKeyvalueLen, 
NULL, 
NULL,
NULL,
NULL);

if (dwret == ERROR_SUCCESS ) 
{ 
printf("(%d)----- %s\n", i+1, szSubKeyvalue); 
} 
}
}


return 0;
}

更多博客文章,欢迎访问:http://blog.csdn.net/llj42270012

转载注明出处

抱歉!评论已关闭.