Saving a Web Page Into A Single File

Do you ever want to save a web page into one single file, including pictures and text? You can use IE SaveAs command, but the drawback is obvious, the Save As dialog is always shown up for security reason. There is a complicated work around to avoid the Save As dialog (see Automated IE SaveAs MHTML). Here I show you an easy way to do it:
#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");

Sample program is not provided, since you can create it on your own and copy & paste the above code snippet into your project.



Comments

  • How to save a picture(*.jpg or *.gif) in web page as a single *.jpg or *.gif file ?

    Posted by toddson on 01/30/2008 07:27pm

    Can we download a picture file in web page and save it as a single picture file?

    Reply
  • excellent

    Posted by china007 on 09/25/2007 03:24am

    very helpful,thanks.

    Reply
  • IMessage' : undeclared identifier

    Posted by haku_nin on 06/26/2007 09:44pm

    Hi, I was trying this example, and also the correction code that Keedo gave, I got this error: IMessage' : undeclared identifier Any thoughts how to solve this problem? Thanks Haku

    Reply
  • How to save complete web page as .htm file instead of .mht file?

    Posted by baskarchinnu on 02/28/2005 05:50am

    Hi
    I am working in Win32 API SDK,  at my program, I am hooking IE window and I am using my own BHO dll (whenever IE is open, dll will attach with IE browser) through this dll I want to save the complete web page without prompting the save as dialogbox. I tried by using as follows
    
    HRESULT hr = m_pWebBrowser->ExecWB(OLECMDID_SAVEAS, 
                                   MSOCMDEXECOPT_DONTPROMPTUSER, NULL, NULL);
    
    I used MSOCMDEXECOPT_DONTPROMPTUSER options, even though I am getting dialog box and even if try to save the web page through save as dialog box also, page is not saving. I am getting the error msg "This Web page could not be saved".
    
    Can you please help me to save the complete web page without prompting save..as dialog box.
    
    If Anyone help to get an answer for this, it would be very much helpful for me

    Reply
  • Function Fixed - Have working demo

    Posted by keedo60 on 04/19/2004 01:08am

    I now have this code working on my Windows 2000 Professional system, using MS Visual C++.

    The errors generated by the compiler were caused by incorrect import statements.

    The correct statements are shown below.

    #import "c:\program files\common files\system\ado\msado15.dll" no_namespace raw_interfaces_only
    #import "C:\WINNT\system32\cdosys.dll" no_namespace raw_interfaces_only
    #include "C:\Program Files\Microsoft SDK\include\cdosysstr.h"
    #include "C:\Program Files\Microsoft SDK\include\cdosyserr.h"

    Make sure each import and include statment is on a single line. Also, note that these files may
    have different paths on your system.

    If you cannot find these files on your system, you will probably have to download the Platform
    SDK from Microsoft.

    You will need the Core SDK and the MDAC SDK component (this is the one with the CDO/ADO
    support). After installation you will find the header files in the include directory of the SDK
    folder. The cdosys.dll should be in your system folder.

    The rest of the code is OK, except you must either uncomment the //return 1 statement, and
    add the required semicolon, or redefine the function as void.

    Here is that code again:

    int CDBrowseView::SaveWholePage(CString szPageURL,CString szFileName)
    {
    
    	 CoInitialize(NULL);
    	 BSTR bstr=szPageURL.AllocSysString();
    	 CString szUserName="domain\\username";
    	 BSTR bstrUserName=szUserName.AllocSysString();
    	 CString szPass="domain\\username";
    	 BSTR bstrPass=szPass.AllocSysString();
    	  
    
         IMessage *pMsg=NULL;
    	 IConfiguration* pConfig = NULL;
    	 _Stream* pStm = NULL;
    
    
    
    
    	  HRESULT hr=CoCreateInstance( __uuidof(Message), NULL, CLSCTX_INPROC_SERVER, __uuidof(IMessage), (void**)&pMsg);
    
    
    	   hr=CoCreateInstance(
           __uuidof(Configuration),
           NULL,
           CLSCTX_INPROC_SERVER,
           __uuidof(IConfiguration),
           (void**)&pConfig);
    
    
          //pMsg->Configuration = pConfig;
    	  pMsg->put_Configuration (pConfig);
    
          try
          {
             pMsg->CreateMHTMLBody(
              bstr, 
                cdoSuppressNone,
                bstrUserName,
                bstrPass );
          }
          catch(_com_error err)
          {
             // handle exception
    		  AfxMessageBox("Exception");
    		  return 0;
          }   
    
          _StreamPtr pStream;
    
    	   pMsg->GetStream(&pStm);
    
    
          pStm->SaveToFile( szFileName.AllocSysString(),
                               adSaveCreateOverWrite);
    
    
    	  pMsg->Release();
    	  pStm->Release();
       CoUninitialize();
    
    	return 1;
    }
    
    Just as an aside, in the event that you want to use a Save As dialog to call the function from,
    here is the code for that:

    void CDBrowseView::OnHtmSave() 
    {
    	static char  szFilter1[] = "MHT File (*.mht)|*.mht|Email File (*.eml)|*.eml||";
    	
    	// FALSE gives you a file save dialog box, TRUE a file open
    	CFileDialog m_FileDialog(FALSE,
              "mht", "*.mht",
              OFN_OVERWRITEPROMPT | OFN_HIDEREADONLY, szFilter1,
              NULL); 
    
    	if (m_FileDialog.DoModal() == IDOK) 
       {
    		// URL of web page to be saved
    	 CString szUrl = CDBrowseView::GetLocationURL();
    		// filename and path return from save as dialog
    	 CString szFile = m_FileDialog.GetPathName();   
    		//call save page function
    	 int r = SaveWholePage(szUrl, szFile);
    		// handle return code from function
    	 if(r == 1)
    		 AfxMessageBox("File Saved    ");
    	 else
    		 AfxMessageBox("Save Failed    ");
       }	
    }

    • Is this a command console app?

      Posted by GPBraaten on 10/03/2006 12:27pm

      Hi Keedo60, The novice is here. I'm looking to run an app like yours from a Command Console prompt that feeds my user_id & password to our Intranet on a scheduled basis. I tried to compile your latest code into a VS 2003 C++ Console App, but recieved several error messages. Am I off base & missed something? Lines 11 & 12 bombed the most. Thanks.

      Reply
    • re: Not able to overwrite file

      Posted by keedo60 on 01/11/2005 07:51pm

      I am guessing that it has to do with your Internet Explorer settings, and since the file has the same URL it is being written from the copy stored in the browser cache. Try going to TOOLS/INTERNET OPTIONS menu of MSIE, click the GENERAL tab, then click SETTINGS in Temporary Internet Files section, and check the box EVERY VISIT TO PAGE.

      This should solve your problem. This will force the browser to update content on refresh or revisit.

      CHtmlView, the IWebBrowser component, and the SDK API's all borrow from MSIE functionality, and so are still limited and regulated my IE settings. Keep this in mind, if you are developing apps for general distribution.

      Reply
    • Not able to overwrite MHTML file once generated

      Posted by prasannak on 01/11/2005 09:29am

      Hello,I can compile the code, and it works properly for the first time.If i try to send the same URL with different DATA/CONTENT in HTML file, the changes does not get reflected in MHTML file and i always see the first created MHTML file. Please help me out in solving this.Thank you.

      Reply
    • Not working for some web pages

      Posted by keedo60 on 12/14/2004 09:00pm

      PS. I also noticed that the page you referred to (http://deskshare.com/download.aspx/), is an ASP
      (dynamically generated) page. Many dynamically generated pages (including PHP)
      do not save correctly even from the full-blown IE using it's built in SAVE AS feature. For optimal
      reliability -- and certainly for testing -- you should try to avoid using ASP and PHP urls with
      this function. Further, pages which make heavy use of java applets, Flash objects, and/or
      ActiveX controls, will pose problems as well.

      Reply
    • Not working for some web pages

      Posted by keedo60 on 12/14/2004 08:48pm

      Ajay.. you say this happens when navigating the pages in CHtmlView. You must realize that the
      browser control used in CHtmlView is merely a mini-browser and does not fully support all the
      same technology that the full-blown IE does.

      Try navigating these websites directly in CHtmlView using the Navigate2() function and you
      will probably generate the same script errors. This is because the IWebBrowser2 control only has
      limited scripting support.

      Here's the true test though... Once you save your file with this code... can you open the saved
      page in your default browser normally. If so, then the code is working perfectly.

      Reply
    • CreateMHTMLBody fails

      Posted by keedo60 on 12/14/2004 08:36pm

      Have you copied and pasted my corrected code, and it's still failing?  You might try
      removing the newlines in the CreateMHTMLBody function, so that the entire function is on one 
      line.  Some compilers are finicky about that.  I am compiling in VC++ 6.0 on Win2000 and it works 
      perfectly.
      
      Now, to Ajay... as far as using live (http://) urls, the webmaster may have no-caching headers 
      or meta tags in place... also dynamically generated pages often do not work well.
      
      I would test the function with straightforward HTML files from your local drive, or loaded from 
      resource.  This at least eliminates the source file from your troubleshooting process.

      Reply
    • Can anyone explain why CreateMHTMLBody call fails?

      Posted by jschen on 11/21/2004 08:46pm

      I'm in front of the same problem as phille and Ajay Sonawane.I need helps,please!

      Reply
    • CreateMHTMLBody call fails

      Posted by phille on 06/22/2004 03:27am

      Hello, I can compile the code, but the call to CreateMHTMLBody always fails and returns HRESULT 0x800401E4 ("Invalid syntax"). Does anyone have an idea what the cause could be?

      Reply
    • Not working for some web pages..Why?

      Posted by Ajay Sonawane on 04/27/2004 01:10am

      Hello, I tried the same code for various web pages.But when I tried to navigate those MHTML files in CHtmlView , it flashed some scripting errors And unable to load and show some .gif images.Can you explain me why it was so? You can try the below link http://deskshare.com/download.aspx/

      Reply
    • need more info

      Posted by keedo60 on 04/25/2004 07:34pm

      Not sure, maybe someone else has a better understanding, but it sounds to me as if the code is working 
      and the problem is with either the url, or the source page itself. Some web pages will not save correctly
      for various reasons.

      One possibility is that if you are using the Save Dialog function I provided, you will need to edit
      the following line:

      CString szUrl = CDBrowseView::GetLocationURL();

      Change "CDBrowseView" to whatever the class name of your CHTMLVIEW class is. Although your compiler
      should be generating an error if this edit was not done.

      The fact that you can compile, run, and generate MIME code, leads me to believe the problem lies
      outside the code. For example, the source page may have a header directive to disallow caching
      of content.

      Have you tested it with more than one URL?

      What platform and OS are you running on?

      Reply
    • Can't work, please help me!

      Posted by Tomol on 04/21/2004 08:32am

      I try it,but the codes can't work yet! I got a file that only have 268 bytes. such as(use UltraEdit): thread-index: AcQnkFqeXgt18I0GT6GWbyBE41XukA== MIME-Version: 1.0 Content-Type: text/plain Content-Transfer-Encoding: 7bit Content-Class: urn:content-classes:message Importance: normal Priority: normal X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1106 SOS, please help me!

      Reply
    Reply
  • corrections...

    Posted by Ajay Sonawane on 04/07/2004 05:10am

    The corrected function is given below..just refer to it.
    
    
    #import  no_namespace raw_interfaces_only
    #import "c:\program files\common files\system\ado\msado15.dll" no_namespace raw_interfaces_only
    #include "cdosysstr.h"
    #include "cdosyserr.h"
    
    
    int SaveWholePage(CString szPageURL,CString szFileName)
    {
    
    	 CoInitialize(NULL);
    	 BSTR bstr=szPageURL.AllocSysString();
    	 CString szUserName="domain\\username";
    	 BSTR bstrUserName=szUserName.AllocSysString();
    	 CString szPass="domain\\username";
    	 BSTR bstrPass=szPass.AllocSysString();
    	  
    
         IMessage *pMsg=NULL;
    	 IConfiguration* pConfig = NULL;
    	 _Stream*        pStm    = NULL;
    
    
    
    
    	  HRESULT hr=CoCreateInstance(
           __uuidof(Message),
           NULL,
           CLSCTX_INPROC_SERVER,
           __uuidof(IMessage),
           (void**)&pMsg);
    
    
    	   hr=CoCreateInstance(
           __uuidof(Configuration),
           NULL,
           CLSCTX_INPROC_SERVER,
           __uuidof(IConfiguration),
           (void**)&pConfig);
    
    
          //pMsg->Configuration = pConfig;
    	  pMsg->put_Configuration (pConfig);
    
          try
          {
             pMsg->CreateMHTMLBody(
              bstr, 
                cdoSuppressNone,
                bstrUserName,
                bstrPass );
          }
          catch(_com_error err)
          {
             // handle exception
    		  AfxMessageBox("Exception");
    		  return 0;
          }   
    
          _StreamPtr pStream;
    
    	   pMsg->GetStream(&pStm);
    
    
          pStm->SaveToFile( szFileName.AllocSysString(),
                               adSaveCreateOverWrite);
    
    
    	  pMsg->Release();
    	  pStm->Release();
       CoUninitialize();
    
    	//return 1
    }
    
    Call to this function...
    SaveWholePage("http://news.bbc.co.uk","c:\\newsbbc.mht");
    
    If you want to navigate it in ChtmlView, then use... 
    Navigate("c:\\newsbbc.mht");
    
    
    Refer...
    http://msdn.microsoft.com/library/
    TOC: Library / Messaging and Collaboration / Collaboration Data Objects / CDO for windows 2000 / CDO for windows 2000 /Reference /Interface / IMessage Interface

    Reply
  • corrections...

    Posted by Ajay Sonawane on 04/07/2004 04:12am

    The corrected function is given below..just refer to it.
    
    
    #import  no_namespace raw_interfaces_only
    #import "c:\program files\common files\system\ado\msado15.dll" no_namespace raw_interfaces_only
    #include "cdosysstr.h"
    #include "cdosyserr.h"
    
    
    int SaveWholePage(CString szPageURL,CString szFileName)
    {
    
    	 CoInitialize(NULL);
    	 BSTR bstr=szPageURL.AllocSysString();
    	 CString szUserName="domain\\username";
    	 BSTR bstrUserName=szUserName.AllocSysString();
    	 CString szPass="domain\\username";
    	 BSTR bstrPass=szPass.AllocSysString();
    	  
    
         IMessage *pMsg=NULL;
    	 IConfiguration* pConfig = NULL;
    	 _Stream*        pStm    = NULL;
    
    
    
    
    	  HRESULT hr=CoCreateInstance(
           __uuidof(Message),
           NULL,
           CLSCTX_INPROC_SERVER,
           __uuidof(IMessage),
           (void**)&pMsg);
    
    
    	   hr=CoCreateInstance(
           __uuidof(Configuration),
           NULL,
           CLSCTX_INPROC_SERVER,
           __uuidof(IConfiguration),
           (void**)&pConfig);
    
    
          //pMsg->Configuration = pConfig;
    	  pMsg->put_Configuration (pConfig);
    
          try
          {
             pMsg->CreateMHTMLBody(
              bstr, 
                cdoSuppressNone,
                bstrUserName,
                bstrPass );
          }
          catch(_com_error err)
          {
             // handle exception
    		  AfxMessageBox("Exception");
    		  return 0;
          }   
    
          _StreamPtr pStream;
    
    	   pMsg->GetStream(&pStm);
    
    
          pStm->SaveToFile( szFileName.AllocSysString(),
                               adSaveCreateOverWrite);
    
    
    	  pMsg->Release();
    	  pStm->Release();
       CoUninitialize();
    
    	//return 1
    }
    
    Call to this function...
    SaveWholePage("http://news.bbc.co.uk","c:\\newsbbc.mht");
    
    If you want to navigate it in ChtmlView, then use... 
    Navigate("c:\\newsbbc.mht");
    
    
    Refer...
    http://msdn.microsoft.com/library/
    TOC: Library / Messaging and Collaboration / Collaboration Data Objects / CDO for windows 2000 / CDO for windows 2000 /Reference /Interface / IMessage Interface

    • its urgent, plz

      Posted by shueb on 04/27/2004 02:16am

      the code works great when i save the .mht file in my current directory but not on remote system. in the remote system it shows only text.please help me.

      Reply
    • Function finally fixed -- have working demo

      Posted by keedo60 on 04/19/2004 01:02am

      I now have this code working on my Windows 2000 Professional system, using MS Visual C++.  
      
      The errors generated by the compiler were caused by incorrect import statements.  The correct statements are shown below.   
      
      #import "c:\program files\common files\system\ado\msado15.dll" no_namespace raw_interfaces_only
      #import "C:\WINNT\system32\cdosys.dll" no_namespace raw_interfaces_only
      #include "C:\Program Files\Microsoft SDK\include\cdosysstr.h"
      #include "C:\Program Files\Microsoft SDK\include\cdosyserr.h"
      
      
      Make sure each import and include statment is on a single line. Also, note that these files may have different paths on your system.  
      
      If you cannot find these files on your system, you will probably have to download the Platform SDK from Microsoft.  You will need the Core SDK and the MDAC SDK component (this is the one with the CDO/ADO support).  After installation you will find the header files in the include directory of the SDK folder.  The cdosys.dll should be in your system folder.
      
      The rest of the code is OK, except you should uncomment the //return 1 statement, and add the required semicolon, so that you can evaluate the success or failure of the function upon return.
      
      Here is that code again:
      
      int CDBrowseView::SaveWholePage(CString szPageURL,CString szFileName)
      {
      
      	 CoInitialize(NULL);
      	 BSTR bstr=szPageURL.AllocSysString();
      	 CString szUserName="domain\\username";
      	 BSTR bstrUserName=szUserName.AllocSysString();
      	 CString szPass="domain\\username";
      	 BSTR bstrPass=szPass.AllocSysString();
      	  
      
           IMessage *pMsg=NULL;
      	 IConfiguration* pConfig = NULL;
      	 _Stream* pStm = NULL;
      
      
      
      
      	  HRESULT hr=CoCreateInstance( __uuidof(Message), NULL, CLSCTX_INPROC_SERVER, __uuidof(IMessage), (void**)&pMsg);
      
      
      	   hr=CoCreateInstance(
             __uuidof(Configuration),
             NULL,
             CLSCTX_INPROC_SERVER,
             __uuidof(IConfiguration),
             (void**)&pConfig);
      
      
            //pMsg->Configuration = pConfig;
      	  pMsg->put_Configuration (pConfig);
      
            try
            {
               pMsg->CreateMHTMLBody(
                bstr, 
                  cdoSuppressNone,
                  bstrUserName,
                  bstrPass );
            }
            catch(_com_error err)
            {
               // handle exception
      		  AfxMessageBox("Exception");
      		  return 0;
            }   
      
            _StreamPtr pStream;
      
      	   pMsg->GetStream(&pStm);
      
      
            pStm->SaveToFile( szFileName.AllocSysString(),
                                 adSaveCreateOverWrite);
      
      
      	  pMsg->Release();
      	  pStm->Release();
         CoUninitialize();
      
      	return 1;
      }
      
      
      Just as an aside, in the event that you want to use a Save As dialog to call the function from, here is the code for that:
      
      void CDBrowseView::OnHtmSave() 
      {
      	static char  szFilter1[] = "MHT File (*.mht)|*.mht|Email File (*.eml)|*.eml||";
      	
      	// FALSE gives you a file save dialog box, TRUE a file open
      	CFileDialog m_FileDialog(FALSE,
                "mht", "*.mht",
                OFN_OVERWRITEPROMPT | OFN_HIDEREADONLY, szFilter1,
                NULL); 
      
      	if (m_FileDialog.DoModal() == IDOK) 
         {
      		// URL of web page to be saved
      	 CString szUrl = CDBrowseView::GetLocationURL();
      		// filename and path return from save as dialog
      	 CString szFile = m_FileDialog.GetPathName();   
      		//call save page function
      	 int r = SaveWholePage(szUrl, szFile);
      		// handle return code from function
      	 if(r == 1)
      		 AfxMessageBox("File Saved    ");
      	 else
      		 AfxMessageBox("Save Failed    ");
         }	
      }

      Reply
    Reply
  • Error compiling sample code

    Posted by NevF on 03/03/2004 03:36pm

    Hi, 
    This looks very good but I'm not getting very far trying to use it. When I compile the code I am getting various errors.
    
    First with:
    #import "c:\program files\common files\system\ado\msado15.dll" _
            no_namespace rename("EOF", "EndOfFile")
    #import  no_namespace rename("EOF", "EndOfFile")
    
    which doesn't look at all right I get:
    
    --------
    --------------------Configuration: FMNLib - Win32 Debug--------------------
    Compiling...
    FMNWebPageGrab.cpp
    D:\SAIG\FMNLib\FMNWebPageGrab.cpp(15) : warning C4185: ignoring unknown #import attribute '_'
    d:\saig\bin6\debug\fmnlib\msado15.tlh(409) : warning C4146: unary minus operator applied to unsigned type, result still unsigned
    d:\saig\bin6\debug\fmnlib\msado15.tlh(1317) : error C2629: unexpected 'short ('
    d:\saig\bin6\debug\fmnlib\msado15.tlh(1317) : error C2238: unexpected token(s) preceding ';'
    D:\SAIG\FMNLib\FMNWebPageGrab.cpp(16) : error C2146: syntax error : missing ';' before identifier 'rename'
    D:\SAIG\FMNLib\FMNWebPageGrab.cpp(16) : error C2501: 'no_namespace' : missing storage-class or type specifiers
    D:\SAIG\FMNLib\FMNWebPageGrab.cpp(16) : fatal error C1004: unexpected end of file found
    Error executing cl.exe.
    
    FMNWebPageGrab.obj - 5 error(s), 2 warning(s)
    --------
    
    Changing to:
    #import "c:\program files\common files\system\ado\msado15.dll" no_namespace rename("EOF", "EndOfFile")
    
    and removing the second:
    #import  no_namespace rename("EOF", "EndOfFile")
    
    I get:
    
    --------------------Configuration: FMNLib - Win32 Debug--------------------
    Compiling...
    FMNWebPageGrab.cpp
    d:\saig\bin6\debug\fmnlib\msado15.tlh(407) : warning C4146: unary minus operator applied to unsigned type, result still unsigned
    D:\SAIG\FMNLib\FMNWebPageGrab.cpp(24) : error C2065: 'IMessagePtr' : undeclared identifier
    D:\SAIG\FMNLib\FMNWebPageGrab.cpp(24) : error C2146: syntax error : missing ';' before identifier 'iMsg'
    D:\SAIG\FMNLib\FMNWebPageGrab.cpp(24) : error C2065: 'iMsg' : undeclared identifier
    D:\SAIG\FMNLib\FMNWebPageGrab.cpp(24) : error C2065: 'Message' : undeclared identifier
    D:\SAIG\FMNLib\FMNWebPageGrab.cpp(25) : error C2065: 'IConfigurationPtr' : undeclared identifier
    D:\SAIG\FMNLib\FMNWebPageGrab.cpp(25) : error C2146: syntax error : missing ';' before identifier 'iConf'
    D:\SAIG\FMNLib\FMNWebPageGrab.cpp(25) : error C2065: 'iConf' : undeclared identifier
    D:\SAIG\FMNLib\FMNWebPageGrab.cpp(25) : error C2065: 'Configuration' : undeclared identifier
    D:\SAIG\FMNLib\FMNWebPageGrab.cpp(26) : error C2227: left of '->Configuration' must point to class/struct/union
    D:\SAIG\FMNLib\FMNWebPageGrab.cpp(29) : error C2227: left of '->CreateMHTMLBody' must point to class/struct/union
    D:\SAIG\FMNLib\FMNWebPageGrab.cpp(31) : error C2065: 'cdoSuppressNone' : undeclared identifier
    D:\SAIG\FMNLib\FMNWebPageGrab.cpp(39) : error C2227: left of '->GetStream' must point to class/struct/union
    Error executing cl.exe.
    
    FMNWebPageGrab.obj - 12 error(s), 1 warning(s)
    --------------
    
    I don't understand why ADO is being used in this code? If possible I'd certainly prefer not to have to use ADO.
    
    I'd really like to be able to use your code and hope you are able to help. Thanks in advance.
    
    Neville

    • ADO is used because...

      Posted by eshipman on 03/09/2004 05:10pm

      CreateMHTMLBody is a CDO call and CDO requires it.

      Reply
    Reply
  • Fuck You!! Nighthawk Do it yourself zzz

    Posted by Legacy on 12/15/2003 12:00am

    Originally posted by: GREAT KOREAN

    @.@
    

    Reply
  • URGENT!!! : where is the C# source code?

    Posted by Legacy on 12/11/2003 12:00am

    Originally posted by: NightHawk


    I need a C# equivalent to the C++ tutorial found here:

    "http://www.codeproject.com/shell/iesaveas.asp";

    The reason is that all other methods, even listed here, will not successfully (automatically) save dynamically created Web pages like "Yahoo.com". Try it with other methods and you will see!!

    Can anyone supply me with a successful C# implementation?

    Cheers

    NightHawk (s9609316@hotmail.com)

    Reply
  • Loading, Please Wait ...

Leave a Comment
  • Your email address will not be published. All fields are required.

Top White Papers and Webcasts

  • Live Event Date: December 11, 2014 @ 1:00 p.m. ET / 10:00 a.m. PT Market pressures to move more quickly and develop innovative applications are forcing organizations to rethink how they develop and release applications. The combination of public clouds and physical back-end infrastructures are a means to get applications out faster. However, these hybrid solutions complicate DevOps adoption, with application delivery pipelines that span across complex hybrid cloud and non-cloud environments. Check out this …

  • On-demand Event Event Date: October 29, 2014 It's well understood how critical version control is for code. However, its importance to DevOps isn't always recognized. The 2014 DevOps Survey of Practice shows that one of the key predictors of DevOps success is putting all production environment artifacts into version control. In this webcast, Gene Kim discusses these survey findings and shares woeful tales of artifact management gone wrong! Gene also shares examples of how high-performing DevOps …

Most Popular Programming Stories

More for Developers

RSS Feeds