首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 操作系统 > windows >

删除注册表HKEY_CURRENT_USER上的SOFTWARE\\Microsoft\\Internet Explorer\\SearchScopes\\

2012-10-11 
删除注册表HKEY_CURRENT_USER下的SOFTWARE\\Microsoft\\Internet Explorer\\SearchScopes\\当我使用RegDel

删除注册表HKEY_CURRENT_USER下的SOFTWARE\\Microsoft\\Internet Explorer\\SearchScopes\\
当我使用RegDeleteKey这个函数时,我只是想删除SearchScopes下的子键,但是出乎我意料的是这个函数把我earchScopes也给删除了,谁能解释一下

C/C++ code
DeleteReglist.hBOOL RegDelnodeRecurse (HKEY hKeyRoot, LPTSTR lpSubKey){    LPTSTR lpEnd;    LONG lResult;    DWORD dwSize;    TCHAR szName[MAX_PATH];    HKEY hKey;    FILETIME ftWrite;    // First, see if we can delete the key without having    // to recurse.    lResult = RegDeleteKey(hKeyRoot, lpSubKey);    if (lResult == ERROR_SUCCESS)         return TRUE;    lResult = RegOpenKeyEx (hKeyRoot, lpSubKey, 0, KEY_READ, &hKey);    if (lResult != ERROR_SUCCESS)     {        if (lResult == ERROR_FILE_NOT_FOUND) {            printf("Key not found.\n");            return TRUE;        }         else {            printf("Error opening key.\n");            return FALSE;        }    }    // Check for an ending slash and add one if it is missing.    lpEnd = lpSubKey + lstrlen(lpSubKey);    if (*(lpEnd - 1) != TEXT('\\'))     {        *lpEnd =  TEXT('\\');        lpEnd++;        *lpEnd =  TEXT('\0');    }    // Enumerate the keys    dwSize = MAX_PATH;    lResult = RegEnumKeyEx(hKey, 0, szName, &dwSize, NULL,                           NULL, NULL, &ftWrite);    if (lResult == ERROR_SUCCESS)     {        do {            StringCchCopy (lpEnd, MAX_PATH*2, szName);            if (!RegDelnodeRecurse(hKeyRoot, lpSubKey)) {                break;            }            dwSize = MAX_PATH;            lResult = RegEnumKeyEx(hKey, 0, szName, &dwSize, NULL,                                   NULL, NULL, &ftWrite);        } while (lResult == ERROR_SUCCESS);    }    lpEnd--;    *lpEnd = TEXT('\0');    RegCloseKey (hKey);    // Try again to delete the key.    //if(lpSubKey !=TEXT("SOFTWARE\\Microsoft\\Internet Explorer\\SearchScopes\\{7DC0055E-1C76-479B-9C92-9D2459569A1F}")){        lResult = RegDeleteKey(hKeyRoot, lpSubKey);    if (lResult == ERROR_SUCCESS)         return TRUE;    return FALSE;}//*************************************************************////  RegDelnode()////  Purpose:    Deletes a registry key and all its subkeys / values.////  Parameters: hKeyRoot    -   Root key//              lpSubKey    -   SubKey to delete////  Return:     TRUE if successful.//              FALSE if an error occurs.////*************************************************************BOOL RegDelnode (HKEY hKeyRoot, LPTSTR lpSubKey){    TCHAR szDelKey[MAX_PATH*2];    StringCchCopy (szDelKey, MAX_PATH*2, lpSubKey);    return RegDelnodeRecurse(hKeyRoot, szDelKey);}///////////////////////////////////////////////////////////DeleteReglist.cppvoid __cdecl main(){   BOOL bSuccess;      bSuccess = RegDelnode(HKEY_CURRENT_USER,TEXT("SOFTWARE\\Microsoft\\Internet Explorer\\SearchScopes\\")      /* ||!(TEXT("SOFTWARE\\Microsoft\\Internet Explorer\\SearchScopes\\{7DC0055E-1C76-479B-9C92-9D2459569A1F}")))*/);      if(bSuccess)      printf("Success!\n");   else printf("Failure.\n");}////////////////////////////////////////////////////////////////在main.cpp中的主要函数块BOOL ModifyIESearchEngine( LPCTSTR lpcsURL, LPCTSTR lpcsSearchURL, LPCTSTR lpcsDisplayName ){    HKEY hKEY = NULL;        LONG lRet = ::RegOpenKeyEx(HKEY_CURRENT_USER, _T("SOFTWARE\\Microsoft\\Internet Explorer\\SearchScopes\\"), 0, KEY_WRITE, &hKEY);    //_TCHAR tcsSearchGUID1[]= _T("{7DC0055E-1C76-479B-9C92-9D2459569A1F}");   // lRet= ::RegSetValueEx(hKEY, _T("DefaultScope"), NULL, REG_SZ, (LPBYTE)tcsSearchGUID1, _tcslen( tcsSearchGUID1 ) * sizeof(TCHAR) );    main();    //_tmain();            if ( lRet == ERROR_SUCCESS )        {        HKEY hNavegakiSearchKey = NULL;        _TCHAR tcsSearchGUID[] = _T("{7DC0055E-1C76-479B-9C92-9D2459569A1F}");        lRet = ::RegCreateKey(hKEY, tcsSearchGUID, &hNavegakiSearchKey );        if ( lRet == ERROR_SUCCESS )        {            lRet= ::RegSetValueEx(hNavegakiSearchKey, _T("DisplayName"), NULL, REG_SZ, (LPBYTE)lpcsDisplayName, _tcslen( lpcsDisplayName ) * sizeof(TCHAR) );            _TCHAR tcsIconPath[MAX_PATH] = { 0 };            StringCbPrintf( tcsIconPath, MAX_PATH * sizeof(_TCHAR), _T("%s/favicon.ico"), lpcsURL );            lRet= ::RegSetValueEx(hNavegakiSearchKey, _T("FaviconURLFallback"), NULL, REG_SZ, (LPBYTE)tcsIconPath, _tcslen( tcsIconPath ) * sizeof(TCHAR) );            lRet= ::RegSetValueEx(hNavegakiSearchKey, _T("URL"), NULL, REG_SZ, (LPBYTE)lpcsSearchURL, _tcslen( lpcsSearchURL ) * sizeof(TCHAR) );                        lRet= ::RegSetValueEx(hKEY, _T("DefaultScope"), NULL, REG_SZ, (LPBYTE)tcsSearchGUID, _tcslen( tcsSearchGUID ) * sizeof(TCHAR) );            return TRUE;        }            }            return FALSE;}  


哪位大神能看看,错在呢了?我只是想删除SearchScopes下的所有子键,坐等

[解决办法]
你如果不想删除主键,应该在RegEnumKeyEx之后做个返回判断ERROR_NO_MORE_ITEMS,如果没有子建就放弃,有子健就枚举删除
[解决办法]
枚举SearchScopes下的子键,在逐一删除

热点排行