Очистка журнала IE8 через DeleteUrlCacheEntry

Тема в разделе "WASM.BEGINNERS", создана пользователем vg, 1 сен 2010.

  1. vg

    vg New Member

    Публикаций:
    0
    Регистрация:
    16 апр 2007
    Сообщения:
    475
    После выполнения указаной ниже функции журнал посещённых веб-узлов (не напечатанные адреса, а именно журнал) не очищается полностью, хотя, по идее, должен. В чём может быть причина и как это сделать?
    Windows 7 x64, IE8
    Код (Text):
    1. void IEDeleteData()
    2. {
    3.     LPINTERNET_CACHE_ENTRY_INFO lpCacheEntry = NULL;
    4.     DWORD dwSize = sizeof(INTERNET_CACHE_ENTRY_INFO);
    5.     HANDLE hCacheEntry = NULL;
    6.     DWORD dwError = ERROR_INSUFFICIENT_BUFFER;
    7.     BOOL fSuccess;
    8.     bool fDone = false;
    9.    
    10.     do
    11.     {
    12.         switch ( dwError )
    13.         {
    14.             case ERROR_INSUFFICIENT_BUFFER: // need a bigger buffer
    15.  
    16.                 if ( lpCacheEntry != NULL )
    17.                     free(lpCacheEntry);
    18.  
    19.                 lpCacheEntry = (LPINTERNET_CACHE_ENTRY_INFO)malloc(dwSize);
    20.                
    21.                 if ( hCacheEntry == NULL )
    22.                     fSuccess = (hCacheEntry = FindFirstUrlCacheEntry(NULL, lpCacheEntry, &dwSize)) != NULL;
    23.                 else
    24.                     fSuccess = FindNextUrlCacheEntry(hCacheEntry, lpCacheEntry, &dwSize);
    25.  
    26.                 if ( fSuccess )
    27.                     dwError = ERROR_SUCCESS;
    28.                 else
    29.                     dwError = GetLastError();
    30.  
    31.                 break;
    32.                
    33.             case ERROR_NO_MORE_ITEMS: // уже всё удалено
    34.  
    35.                 fDone = true;
    36.                 break;
    37.                
    38.             case ERROR_SUCCESS: // если нет ошибок
    39.  
    40.                     DeleteUrlCacheEntry(lpCacheEntry->lpszSourceUrlName);
    41.                
    42.                 if ( FindNextUrlCacheEntry(hCacheEntry, lpCacheEntry, &dwSize) )
    43.                     dwError = ERROR_SUCCESS;
    44.                 else
    45.                     dwError = GetLastError();
    46.  
    47.                 break;
    48.                
    49.             default:
    50.  
    51.                 fDone = true;
    52.                 break;
    53.         }
    54.  
    55.         if ( fDone )
    56.         {
    57.             free(lpCacheEntry);
    58.             if ( hCacheEntry )
    59.                 FindCloseUrlCache(hCacheEntry);
    60.         }
    61.     }
    62.     while( !fDone );
    63. }
     
  2. onSide

    onSide New Member

    Публикаций:
    0
    Регистрация:
    18 июн 2008
    Сообщения:
    476
    Бросайте кодинг, раз вам лень тупо набрать в гугле пару слов...
    http://www.google.com.ua/search?hl=uk&q=DeleteUrlCacheEntry+not+work&aq=f&aqi=&aql=&oq=&gs_rfai=


    PS. Вообще за такое банить пора уже))
     
  3. vg

    vg New Member

    Публикаций:
    0
    Регистрация:
    16 апр 2007
    Сообщения:
    475
    А с чего вы взяли, что там есть решение? Я не нашёл.

    Такие высказывания надо обосновывать, например, правильным ответом.


    Добавлю, что здесь дело скорее не в DeleteUrlCacheEntry, т. к. если посмотреть lpszSourceUrlName (lpszLocalFileName) которые перебирает функция, то там нет всего списка адресов из журнала.
     
  4. vg

    vg New Member

    Публикаций:
    0
    Регистрация:
    16 апр 2007
    Сообщения:
    475
    Решение
    Код (Text):
    1. HRESULT IEDeleteHistory()
    2. {
    3.     HRESULT hr;
    4.  
    5.     CoInitializeEx(NULL, COINIT_MULTITHREADED);
    6.  
    7.     IUrlHistoryStg2* pUrlHistoryStg2 = NULL;
    8.     hr = CoCreateInstance(CLSID_CUrlHistory,
    9.               NULL,
    10.               CLSCTX_INPROC,
    11.                           IID_IUrlHistoryStg2,
    12.                           (void**)&pUrlHistoryStg2);
    13.     if ( SUCCEEDED(hr) )
    14.     {
    15.     hr = pUrlHistoryStg2->ClearHistory();
    16.         pUrlHistoryStg2->Release();
    17.     }
    18.  
    19.     CoUninitialize();
    20.  
    21.     return hr;
    22. }
    Очищает только журнал.