最近在学习windows api编程,做些笔记,虽然有些东西不是很懂,但还是学会用吧,用多了就会熟的
使用到的函数
1、RegOpenKeyEx
2、RegQueryKeyInfo3、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.youkuaiyun.com/llj42270012
转载注明出处