在哪里可以找到IE浏览器的下载历史记录

Where can I find download history of Internet Explorer?

本文关键字:下载 历史 记录 浏览器 IE 在哪里      更新时间:2023-10-16

>有没有办法获取IE的下载历史记录?

我们从downloads.sqlite文件中获取Firefox的下载历史记录,并从history.sqlite文件中获取Chrome的下载历史记录。

但是如何在IE中找出答案呢?

使用 FindFirstUrlCacheEntry() 进行了一些尝试,但输出与预期不符。阅读有关索引.dat文件的信息,但是当我在IE中浏览时,它没有更新。

使用名为 IUrlHistoryStg 的 COM 接口。

int main()
{
    CoInitialize(NULL);
    IUrlHistoryStg* ieHistory = NULL;
    HRESULT hr = CoCreateInstance(CLSID_CUrlHistory, NULL, CLSCTX_ALL, IID_IUrlHistoryStg, (LPVOID *)(&ieHistory));
    if (!SUCCEEDED(hr))
        return 1;
    IEnumSTATURL* urlEnumer;
    hr = ieHistory->EnumUrls(&urlEnumer);
    if (!SUCCEEDED(hr))
        return 2;
    if (!SUCCEEDED(urlEnumer->SetFilter(L"", STATURL_QUERYFLAG_ISCACHED|STATURL_QUERYFLAG_TOPLEVEL|STATURL_QUERYFLAG_NOURL|STATURL_QUERYFLAG_NOTITLE|STATURLFLAG_ISTOPLEVEL|STATURLFLAG_ISCACHED)))
        return 4;
    if (!SUCCEEDED(urlEnumer->Reset()))
        return 3;
    unsigned long correct = 0;
    STATURL result = {};
    struct Urls
    {
        std::wstring url;
        std::wstring title;
        Urls(LPWSTR url, LPWSTR title) : url(url ? url : L""), title(title ? title : L"")
        {}
    };
    std::vector<Urls> urls;
    do
    {
        result.cbSize = sizeof(result);
        if (SUCCEEDED(urlEnumer->Next(1, &result, &correct)))
        {
            Urls url(result.pwcsUrl, result.pwcsTitle);
            urls.push_back(url);
        }
    } 
    while (correct == 1);
    size_t size = urls.size();
    ieHistory->Release();
    urlEnumer->Release();
    return 0;
}