请问如何读取IE  history文件的内容啊?就是想获取浏览过哪些网址,什么时间浏览的等等信息。history文件夹下的好像全是DAT文件,要怎么读出信息啊?或者有什么别的方法能知道这些访问的历史记录?急啊!!!各位大大请指教!谢谢啦

解决方案 »

  1.   

     
    用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   
      把下面的每个值枚举出来就可以了   
      

  2.   

     浏览IE收藏夹   
      --   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函数即可。