procedure DeleteCache;
var
lpEntryInfo: PInternetCacheEntryInfo;
hCacheDir: LongWord;
dwEntrySize: LongWord;
begin
dwEntrySize := 0;
FindFirstUrlCacheEntry(nil, TInternetCacheEntryInfo(nil^), dwEntrySize);
GetMem(lpEntryInfo, dwEntrySize);
try
if dwEntrySize > 0 then lpEntryInfo^.dwStructSize := dwEntrySize;
hCacheDir := FindFirstUrlCacheEntry(nil, lpEntryInfo^, dwEntrySize);
if hCacheDir <> 0 then
try
repeat
DeleteUrlCacheEntry(lpEntryInfo^.lpszSourceUrlName);
FreeMem(lpEntryInfo, dwEntrySize);
dwEntrySize := 0;
FindNextUrlCacheEntry(hCacheDir, TInternetCacheEntryInfo(nil^), dwEntrySize);
GetMem(lpEntryInfo, dwEntrySize);
if dwEntrySize > 0 then lpEntryInfo^.dwStructSize := dwEntrySize;
until not FindNextUrlCacheEntry(hCacheDir, lpEntryInfo^, dwEntrySize);
finally
FindCloseUrlCache(hCacheDir);
end;
finally
FreeMem(lpEntryInfo, dwEntrySize);
end;
end;
Автор Rouse_
Что это код?
Код - процедура DeleteCache, которая итерирует по всем закэшированным URL в системе и удаляет их. Это эффективно очищает кэш браузера и временные файлы Интернета.
Как работает?
Описание шаг за шагом:
dwEntrySize := 0; - Инициализирует переменную для хранения размера кэш-ентрии.
FindFirstUrlCacheEntry(nil, TInternetCacheEntryInfo(nil^), dwEntrySize); - Поиск первого закэшированного URL в системе. Параметры nil указывают, что мы не имеем конкретной кэш-ентрии в виду.
GetMem(lpEntryInfo, dwEntrySize); - Выделяет память для хранения информации о кэш-ентрии.
try...finally - Блок, используемый для обеспечения освобождения выделенной памяти даже если возникнет исключение.
Внутри блока try:
Если найдена кэш-ентрия (dwEntrySize > 0), код получает имя источника URL и удаляет соответствующую кэш-ентрию с помощью DeleteUrlCacheEntry(lpEntryInfo^.lpszSourceUrlName);.
Код затем освобождает выделенную память (FreeMem(lpEntryInfo, dwEntrySize);) и сбрасывает переменную dwEntrySize.
Он повторяет этот процесс, пока не будет найдено больше кэш-ентрий (until not FindNextUrlCacheEntry(hCacheDir, lpEntryInfo^, dwEntrySize);).
Вне блока try...finally:
Код освобождает любую оставшуюся выделенную память (FreeMem(lpEntryInfo, dwEntrySize);).
Альтернативное решение:
Если вы хотите очистить только кэш конкретного браузера (например, Internet Explorer), можно использовать интерфейс IInternetCacheManager и его метод DeleteCacheEntry(). Это требует больше кода и обработки ошибок, но обеспечивает более тонкую контроль над процессом удаления кэша.
Пример модификации кода для очистки только кэша Internet Explorer:
usesWinInet;procedureDeleteIECache;varicm:IInternetCacheManager;pUnk:IUnknown;begin// Получение интерфейса IInternetCacheManager для Internet ExplorerCoCreateInstance(CLASS_InternetCacheManager,nil,CLSCTX_INPROC_SERVER,pUnk);icm:=pUnkasIInternetCacheManager;// Очистка кэшаicm.DeleteCacheEntry(nil);// Освобождение интерфейсаpUnk:=nil;end;
Обратите внимание, что этот код требует установки Internet Explorer на системе и может не работать для других браузеров.
В статье приведен пример кода на Delphi, который демонстрирует процесс очистки cookie и Temporaly Internet Files.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS