首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

使用 CDO 元件將完整網頁另存為單一 MHT 檔案

     編輯:關於C++

MHT (MIME HTML) 可將網頁的 HTML、圖片、CSS、Script 等所有資源封裝成單一檔案。利用 Microsoft CDO (Collaboration Data Objects) 元件的 IMessage::CreateMHTMLBody 方法,可輕鬆實現此功能。

前置需求

  • 引用 SHDocVw_OCX.h, cdoex.h, msado15.h(BCB 6.0 環境)。
  • 機器需安裝 Outlook 或 CDO 庫(通常隨 Office 安裝)。
  • 命名空間 using namespace CDO;

核心函數 SaveWholePage

void __fastcall SaveWholePage(BSTR bstrUrl, BSTR bstrFileName) {
    CoInitialize(NULL);
    IMessage *pMsg; IConfiguration *pConfig;
    CoCreateInstance(__uuidof(Message), NULL, CLSCTX_INPROC_SERVER, __uuidof(IMessage), (void**)&pMsg);
    CoCreateInstance(__uuidof(Configuration), NULL, CLSCTX_INPROC_SERVER, __uuidof(IConfiguration), (void**)&pConfig);
    pMsg->put_Configuration(pConfig);

    try {
        pMsg->CreateMHTMLBody(bstrUrl, cdoSuppressNone, L"", L"");
    } catch (...) {
        ShowMessage("錯誤:無法建立 MHTML 主體");
        pMsg->Release(); pConfig->Release(); CoUninitialize(); return;
    }

    _Stream *pStream;
    pMsg->GetStream(&pStream);
    pStream->SaveToFile(bstrFileName, adSaveCreateOverWrite);

    pStream->Release(); pMsg->Release(); pConfig->Release();
    CoUninitialize();
}

呼叫範例

void __fastcall TForm1::Button1Click(TObject *Sender) {
    SaveWholePage(WideString("https://www.ccrun.com"), WideString("C:\\123.mht"));
}

原理: CDO 內建微型瀏覽器引擎,會下載目標 URL 及其所有參考資源,依 MHTML 標準 (RFC 2557) 組裝成 multipart/related MIME 訊息,再透過 ADO Stream 存檔。適用於網頁歸檔、離線閱讀、報表匯出等場景。

注意:現代網頁大量使用動態載入 (AJAX/Fetch)、Shadow DOM、CSP 限制,CDO 可能無法完整捕獲執行後的 DOM 狀態。複雜頁面建議改用 Headless Chrome (Puppeteer/Playwright) 列印為 PDF 或 MHTML。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved