有没有办法获取IE的下载历史记录?
我们从downloads.sqlite文件获取Firefox的下载历史记录,我们从history.sqlite文件中获取Chrome的下载历史记录。
但如何在IE中找到答案?
使用FindFirstUrlCacheEntry()进行了一些试用,但输出不是预期的。 阅读index.dat文件,但是当我在IE中浏览时它没有更新。
答案 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;
}