在IE的窗口中,在右键菜单中选择自己加入的保存命令,将当前打开的网页内容加入到自己的程序中,就像 超星阅览器 实现的功能

解决方案 »

  1.   

    网页是由HTML语言和各种图形图像声音资源组成的,它的核心是HTML,你可以先得到该网页的HTML源程序,将它以文本方式保存在一个.htm文件里,然后写一个类似语法分析器的东东将该.htm中的中的资源地址得到,再将这些资源也保存下来。
      

  2.   

    更郁闷了,就是想知道如何保存的。
    IWebBrowser是怎么用的?如何把IE打开的网页直接保存成mht文件?
      

  3.   

    #import "c:\program files\common files\system\ado\msado15.dll" _
            no_namespace rename("EOF", "EndOfFile")
    #import  no_namespace rename("EOF", "EndOfFile")...void SaveWholePage(LPCTSTR page_url,LPCTSTR save_filename)
    {
       CoInitialize(NULL);
       {
          IMessagePtr       iMsg(__uuidof(Message));
          IConfigurationPtr iConf(__uuidof(Configuration));
          iMsg->Configuration = iConf;
          try
          {
             iMsg->CreateMHTMLBody(
                page_url, 
                cdoSuppressNone,
                "domain\\username",
                "password");
          }
          catch(_com_error err)
          {
             // handle exception
          }   
          _StreamPtr pStream=iMsg->GetStream();
          pStream->SaveToFile( save_filename,
                               adSaveCreateOverWrite);
       }
       CoUninitialize();
    }
    Sample Usage: SaveWholePage("http://www.zaobao.com/gj/zg002_050203.html",
                  "test.mht");参考:http://www.codeguru.com/ieprogram/SaveWholePage.html
      

  4.   

    谢谢matq2008(叶子.net),你的代码好像有些问题。
    另外一个问题,你的代码可以用在win98下吗?是不是各版本的操作系统都好用?
      

  5.   

    http://www.codeproject.com/shell/IESaveAs.asp
      

  6.   

    修改注册(.rgs)文件,
    HKEY_CURRENT_USER
    {
    NoRemove SOFTWARE
    {
    NoRemove Microsoft
    {
    NoRemove 'Internet Explorer'
    {

    NoRemove MenuExt
    {
    ForceRemove '另存为' = s 'res://%MODULE%/SaveAs'
    {
    Val 'Contexts' = d '247'
    }


    }
    }
    }
    }
    }
     编写HTML资源文件:
    在资源文件中调用组件方法:<script language="VBScript">
    On Error Resume Next
         set IEAssistant = CreateObject( "IEAssistant.Operator" )
       if err<>0 then
    Alert("Error in create object!")
     else

    IEAssistant.SaveAs

     end if
         set IEAssistant = nothing
    </script>编写组件方法,实现后期绑定GetIDsOfNames ,Invoke
    SaveAs
    IWebBrowser2 *browser = NULL;
    browser=GetIEFromWnd();
    if(browser!=NULL){
    //////////////////////////
    CComQIPtr<IHTMLDocument2, &IID_IHTMLDocument2> pDocument;
    IDispatch *pDisp = NULL;
    HRESULT hr = browser->get_Document(&pDisp);
    if (SUCCEEDED(hr) && pDisp!=NULL) {
    pDocument = pDisp;
    pDisp->Release();
    CComPtr<IHTMLSelectionObject>pSelectionObj;
    hr=pDocument->get_selection(&pSelectionObj);
    if(SUCCEEDED(hr)){
    hr=pSelectionObj->createRange(&pDisp );
    CComQIPtr<IHTMLTxtRange> pTextRng;
    pTextRng=pDisp;
    pDisp->Release();
    CComBSTR bstr;
    pTextRng->get_text(&bstr);
     if(bstr.Length ()!=0){
    CFileDialog fd(FALSE,_T("*.Txt"),"SelectText.txt",NULL,_T("Text Files(*.txt)\0*.txt\0"),GetActiveWindow());
    if(fd.DoModal ()==IDOK){
    USES_CONVERSION;
    if(IsFileExist(fd.m_szFileName)){
    int nYESNO=MessageBox(NULL,"File Existed, Ovewrite it?","Infomation",MB_YESNO|MB_ICONINFORMATION);
    if(nYESNO==IDYES){
    SaveToFile(fd.m_szFileName,(BYTE*)OLE2T(bstr),lstrlen(OLE2T(bstr)));
    }
    return S_OK;
    }
    SaveToFile(fd.m_szFileName,(BYTE*)OLE2T(bstr),lstrlen(OLE2T(bstr)));
    return S_OK;
     }
     }
     else{
     //////////////////////
     int hr;
    IHTMLWindow2* pWindow2 = NULL;
    IHTMLWindow2* pFrameWindow2  = NULL;
    IHTMLDocument2* pFrameDoc = NULL;
    IHTMLFramesCollection2* pFrameColl = NULL;

    long cFrames; hr = pDocument->get_parentWindow(&pWindow2);
    if(SUCCEEDED(hr) && pWindow2){
    pWindow2->get_frames(&pFrameColl);
    if (SUCCEEDED(hr = pFrameColl->get_length( &cFrames )))
    {
    for ( int i=0; i < cFrames ; i++ )
    {
    VARIANT vIndex;
    vIndex.vt = VT_UINT;
    vIndex.lVal = i;
    VARIANT var2 = { 0 };
    LPDISPATCH pDisp; 
    VARIANT frame;

    if (SUCCEEDED(hr = pFrameColl->item( &vIndex, &frame ))){
    hr = frame.pdispVal->QueryInterface(IID_IHTMLWindow2,  (void**)&pFrameWindow2);
    pFrameWindow2->Release ();
    hr = pFrameWindow2->get_document(&pFrameDoc);
    if(pFrameDoc!=NULL&&SUCCEEDED(hr))
    {
    CComPtr<IHTMLSelectionObject>pSelectionObj;
    hr=pFrameDoc->get_selection(&pSelectionObj);
    if(SUCCEEDED(hr)){
    hr=pSelectionObj->createRange(&pDisp );
    CComQIPtr<IHTMLTxtRange> pTextRng;
    pTextRng=pDisp;
    pDisp->Release();
    CComBSTR bstr;
    pTextRng->get_text(&bstr);
     if(bstr.Length ()!=0){
    CFileDialog fd(FALSE,_T("*.Txt"),"SelectText.txt",NULL,_T("Text Files(*.txt)\0*.txt\0"),GetActiveWindow());
    if(fd.DoModal ()==IDOK){
    USES_CONVERSION;
    if(IsFileExist(fd.m_szFileName)){
    int nYESNO=MessageBox(NULL,"File Existed, Ovewrite it?","Infomation",MB_YESNO|MB_ICONINFORMATION);
    if(nYESNO==IDYES)SaveToFile(fd.m_szFileName,(BYTE*)OLE2T(bstr),lstrlen(OLE2T(bstr)));
    return S_OK;
    }
    SaveToFile(fd.m_szFileName,(BYTE*)OLE2T(bstr),lstrlen(OLE2T(bstr)));
    return S_OK;
     }
    }
    }
    }
    }
    }
    }
    }
     }
     
     hr=browser->ExecWB(OLECMDID_SAVEAS, 
      OLECMDEXECOPT_PROMPTUSER, NULL, NULL);
    }     
    }}
      

  7.   

    上面的方法,如果有文字选中,则只保存选择的文字到文本文件,否则将保存整个网页.
    或者使用下面的简单脚本:
    <SCRIPT LANGUAGE="JavaScript" defer> 
    var browserwin = external.menuArguments;
    var htmldoc = browserwin.document;htmldoc.execCommand("SaveAs",1);</SCRIPT>
    但是你自己的组件和程序将无法得到响应
      

  8.   

    谢谢microran2000() 、matq2008(叶子.net)、gzshd(郁闷)、baobeixiong(宝贝熊)、huazaimh(sky)。这几天中了冲击波,上不了网。马上结贴