帮忙看看这段注册表操作的问题

zqqq1 2005-11-25 09:49:53
HKEY hd;
hd=HKEY_LOCAL_MACHINE;
char* Regkeyname="System\\CurrentControlSet\\Services\\aaaaaa";
char *sclass="";
DWORD nbf=0;
LONG ret=RegCreateKeyEx(hd,Regkeyname,0,sclass,REG_OPTION_NON_VOLATILE,
KEY_READ|KEY_WRITE,NULL,&hd,&nbf);
if (REG_OPENED_EXISTING_KEY == nbf)
{
//如果存在就删掉
RegCloseKey(hd);
ret=RegDeleteKey(HKEY_LOCAL_MACHINE,Regkeyname);/**********************/
//重新创建
RegCreateKeyEx(HKEY_LOCAL_MACHINE,Regkeyname,0,sclass,REG_OPTION_NON_VOLATILE,
KEY_READ|KEY_WRITE,NULL,&hd,&nbf);
}

我用/**********************/标注的这一句结果返回是5,肯定是错了,就是没删掉,我想问问怎样才能删掉啊,完成功能很简单,就是创建指定的子键,如果存在就先删掉,然后再创建一下
...全文
133 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
rabbitweng 2005-11-25
  • 打赏
  • 举报
回复
用CRegKey类吧,里面有个CRegKey::RecurseDeleteKey()函数应该能实现你的要求
shangguancheng 2005-11-25
  • 打赏
  • 举报
回复
SHDeleteKey是Shell Function,其功能就和你手动操作注册表的动作一样。
RegDeleteKey必须子键为空,就像删除目录一样,子目录必须为空,可以用递归的方法也能实现删除。
zqqq1 2005-11-25
  • 打赏
  • 举报
回复
可是下面有子键啊,但是也删不掉
改成这样RegDeleteKey(hd,Regkeyname);也删不掉啊,给个例子成不
zqqq1 2005-11-25
  • 打赏
  • 举报
回复
真的可以了,可是为什么呢?给我讲讲原因,先给50分
shangguancheng 2005-11-25
  • 打赏
  • 举报
回复
RegDeleteKey必须有子键;SHDeleteKey属于Shell Function,可以直接删除。
goodboyws 2005-11-25
  • 打赏
  • 举报
回复
必须没有子健
RegDeleteKey
The RegDeleteKey function deletes a subkey.

Windows 95/98/Me: The function also deletes all subkeys and values. To delete a key only if the key has no subkeys or values, use the SHDeleteEmptyKey function.

Windows NT/2000 or later: The subkey to be deleted must not have subkeys. To delete a key and all its subkeys, you need to recursively enumerate the subkeys and delete them individually. To recursively delete keys, use the SHDeleteKey function.

LONG RegDeleteKey(
HKEY hKey, // handle to open key
LPCTSTR lpSubKey // subkey name
);
Parameters
hKey
[in] Handle to a currently open key or one of the following predefined reserved handle values:
HKEY_CLASSES_ROOT
HKEY_CURRENT_CONFIG
HKEY_CURRENT_USER
HKEY_LOCAL_MACHINE
HKEY_USERS
Windows NT/2000 or later: HKEY_PERFORMANCE_DATA
Windows 95/98/Me: HKEY_DYN_DATA

The key specified by the lpSubKey parameter must be a subkey of the key identified by hKey.

lpSubKey
[in] Pointer to a null-terminated string specifying the name of the key to delete. This parameter cannot be NULL.
Windows NT/2000 or later: The specified key must not have subkeys.

shangguancheng 2005-11-25
  • 打赏
  • 举报
回复
用这个试试
DWORD SHDeleteKey(HKEY hkey,LPCTSTR pszSubKey);

Header shlwapi.h
Import library shlwapi.lib

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧