#include <shlguid.h> // Needed for CLSID_CUrlHistory #include <urlhist.h> // Needed for IUrlHistoryStg2 and IID_IUrlHistoryStg2
void Test() { IUrlHistoryStg2* pHistory;// We need this interface for clearing the history. HRESULT hr; DWORD cRef; CoInitialize(NULL); // Load the correct Class and request IUrlHistoryStg2 hr = CoCreateInstance(CLSID_CUrlHistory, NULL, CLSCTX_INPROC_SERVER, IID_IUrlHistoryStg2, reinterpret_cast<void **>(&pHistory)); if(SUCCEEDED(hr)) {
char a[200]; char b[200]; strcpy(a,"www.csdn.net"); strcpy(b,"test"); hr=pHistory->AddUrl((LPCOLESTR)(&a),(LPCOLESTR)(&b),0); // Clear the IE History hr = pHistory->ClearHistory(); } // Release our reference to the cRef = pHistory->Release(); CoUninitialize(); }
用IUrlHistoryStd2 接口可以实现,在VC的文档中没有这个接口的描述,不过你可以取看VC的源程序和头文件。
如下面是在记录中添加50条
IUrlHistoryStg2* pUrlHistoryStg2 = NULL;
HRESULT hr = CoCreateInstance(CLSID_CUrlHistory,
NULL, CLSCTX_INPROC, IID_IUrlHistoryStg2,
(void**)&pUrlHistoryStg2);
if (SUCCEEDED(hr))
{
char a[200];
char b[200];
strcpy(a,"www.csdn.net");
strcpy(b,"test");
hr=pUrlHistoryStg2->AddUrl((LPCOLESTR)(&a),(LPCOLESTR)(&b),0);
pUrlHistoryStg2->Release();
}
你也可以试试这个方法
#include <shlguid.h> // Needed for CLSID_CUrlHistory
#include <urlhist.h> // Needed for IUrlHistoryStg2 and IID_IUrlHistoryStg2
void Test()
{
IUrlHistoryStg2* pHistory;// We need this interface for clearing the history.
HRESULT hr;
DWORD cRef;
CoInitialize(NULL);
// Load the correct Class and request IUrlHistoryStg2
hr = CoCreateInstance(CLSID_CUrlHistory, NULL, CLSCTX_INPROC_SERVER,
IID_IUrlHistoryStg2, reinterpret_cast<void **>(&pHistory));
if(SUCCEEDED(hr))
{
char a[200];
char b[200];
strcpy(a,"www.csdn.net");
strcpy(b,"test");
hr=pHistory->AddUrl((LPCOLESTR)(&a),(LPCOLESTR)(&b),0);
// Clear the IE History
hr = pHistory->ClearHistory();
}
// Release our reference to the
cRef = pHistory->Release();
CoUninitialize();
}
或者:
1)在你的 CYourApp::InitInstance() 里面别忘了夹上 ::CoInitialize(NULL);
2)在 CYourApp::ExitInstance() 里面加上 ::CoUninitialize();
3)头文件:
#include <urlhist.h>
#include <comdef.h>
4)
void CTestDlgDlg::OnOK()
{
("my test link"));
HRESULT hr;
IUrlHistoryStg2 *puhs;
IEnumSTATURL *pesu;
STATURL su;
ULONG celt;
_bstr_t bstr;
hr = ::CoCreateInstance(CLSID_CUrlHistory, NULL, CLSCTX_INPROC_SERVER, IID_IUrlHistoryStg, (LPVOID *)&puhs);
if(SUCCEEDED(hr))
{
hr = puhs->EnumUrls(&pesu);
if(SUCCEEDED(hr))
{
while(SUCCEEDED(pesu->Next(1, &su, &celt)) && celt > 0)
{
bstr = su.pwcsUrl;
m_list1.AddString(bstr);
//AfxMessageBox(bstr);
}
puhs->Release();
}
}
还有:
IE 浏览过的 URL 都记录在以下注册键下面,
HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\TypedURLs
把下面的每个值枚举出来就可以了
-- lostall
本文论述的对象是Internet Shortcut,简要说明如何浏览IE收藏夹。
基本思路如下:
1. 使用Windows Shell函数,SHGetSpecialFolderLocation、SHGetPathFromIDList等得到当前收藏夹目录。
2. 浏览文件夹,对每一个.url文件都进行如下处理。
3. 使用CLSID_InternetShortcut创建一个Internet Shortcut对象实例,并得到IUniformResourceLocator
接口对象指针。
4. 查询得到一个IPersistFile接口指针。
5. 使用IPersistFile::Load函数,以.url文件名为参数,初始化Shortcut对象。
6. 查询得到一个IPropertySetStorage接口指针。
7. 使用IPropertySetStorage::Open函数,以FMTID_Intshcut为参数,得到一个IPropertyStorage接口指针。
8. 使用IPropStorage::ReadMultipl函数,查询得到这个shortcut的各种属性信息,包括URL等。
It's OK!
如果仅仅是想得到URL的话,可以不使用IPropertySetStorage和IPropetyStorage接口,而直接用
IUniformResourceLocator::GetURL函数即可。