最近在学习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
转载注明出处