在哪里可以找到Internet Explorer的下载历史记录?

时间:2016-04-23 07:19:15

标签: c++ internet-explorer

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

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

但如何在IE中找到答案?

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

1 个答案:

答案 0 :(得分:0)

使用名为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;
}