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,肯定是错了,就是没删掉,我想问问怎样才能删掉啊,完成功能很简单,就是创建指定的子键,如果存在就先删掉,然后再创建一下

解决方案 »

  1.   

    用这个试试
    DWORD SHDeleteKey(HKEY hkey,LPCTSTR pszSubKey);Header shlwapi.h 
    Import library shlwapi.lib
      

  2.   

    必须没有子健
    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. 
      

  3.   

    RegDeleteKey必须有子键;SHDeleteKey属于Shell Function,可以直接删除。
      

  4.   

    可是下面有子键啊,但是也删不掉
    改成这样RegDeleteKey(hd,Regkeyname);也删不掉啊,给个例子成不
      

  5.   

    SHDeleteKey是Shell Function,其功能就和你手动操作注册表的动作一样。
    RegDeleteKey必须子键为空,就像删除目录一样,子目录必须为空,可以用递归的方法也能实现删除。
      

  6.   

    用CRegKey类吧,里面有个CRegKey::RecurseDeleteKey()函数应该能实现你的要求