Chinaunix首页 | 论坛 | 博客
  • 博客访问: 102415
  • 博文数量: 30
  • 博客积分: 2000
  • 博客等级: 大尉
  • 技术积分: 382
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-26 21:14
文章分类

全部博文(30)

文章存档

2015年(1)

2008年(29)

我的朋友

分类: C/C++

2008-10-26 21:46:12

VC6中没有提供删除带有子键的注册表键,而最新的.net则提供了这个函数。不过很多程序还是用VC6写的。

我就发个自己弄出来的代码:
 
测试绝对能用!
 
/***
*DeleteSubKeyTree(HKEY hKey, LPCTSTR lpSubKey)
* 功能: 递归删除注册表子键
* 入口:
*      hKey :  一个HEKY类型的参数,比如HKEY_CLASSES_ROOT
*      lpSubKey: 比如".exe"
* 出口: 成功删除,返回ERROR_SUCCESS,失败则返回一个非0值。
*
* 实例:        LPCTSTR lpSubKey= "shile";
        HKEY hKey = HKEY_CLASSES_ROOT;
        long ret;
        ret = DeleteSubKeyTree(hKey, lpSubKey);
        if (ret == ERROR_SUCCESS)
        {
                SetDlgItemText(IDC_STATIC, "删除子键HKEY_CLASSES_ROOT\\shile成功");
        }
*     
**************************************************/

LONG DeleteSubKeyTree(HKEY hKey, LPCTSTR lpSubKey)
{

        LONG lResult;
        HKEY hSubKey;
        DWORD   dwIndex, cbName;
        char   szSubKey[512];
        FILETIME   ft;
        lResult   =   RegOpenKeyEx(hKey,   lpSubKey,   0,   KEY_ALL_ACCESS,&hSubKey);
        if (lResult != ERROR_SUCCESS)
        {
                RegCloseKey(hSubKey);
                return lResult;
        }
        dwIndex = 0;
        cbName = sizeof(szSubKey)/sizeof(szSubKey[0]);
        while (ERROR_SUCCESS == (lResult = RegEnumKeyEx(hSubKey, dwIndex, szSubKey, &cbName, NULL, NULL, NULL, &ft)))
        {
                DeleteSubKeyTree(hSubKey, szSubKey);
        }
        RegCloseKey(hSubKey);
        lResult = RegDeleteKey(hKey, lpSubKey);
        return lResult;
}
阅读(901) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~