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;
}
これは、superuser.comにとってより良い質問です。 – Barmar
これはオフトピックではありません。彼はプログラム的に解決策を探しています。下の例は、コード例が不足していると投票しますが、関連性のないものとして閉じることはできません。 –