我正在寻找一种使用c ++代码从Internet Explorer获取浏览历史记录的方法,其他浏览器使用数据库,但IE呢?
谢谢!
答案 0 :(得分:2)
使用名为IUrlHistoryStg的COM接口。
质量差,但这是如何正确枚举IE历史记录的简单示例。
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;
}
在使用之前,请阅读文档并添加更合适的错误处理。
另请here阅读有关COM的内容。