You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Delphi 11.3:如何无对话框保存带资源的MHT文件

问题:Delphi WebBrowser无对话框保存带资源的MHT文件

我使用Delphi 11.3编写了如下代码,通过WebBrowser控件加载网页,尝试保存带资源的MHT文件:

uses
  System.SysUtils, MSHTML, ActiveX, SHDocVw;

implementation

procedure TForm1.FormCreate(Sender: TObject);
begin
  WebBrowser1.Navigate('google.com');
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  Dispatch: IDispatch;
  OleCommand: IOleCommandTarget;
  vaIn, vaOut: OleVariant;
  FilePath: WideString;
begin
  Dispatch := (WebBrowser1.Document as IHTMLDocument2) as IDispatch;

  if Succeeded(Dispatch.QueryInterface(IOleCommandTarget, OleCommand)) then
  begin
    FilePath := ExtractFilePath(ParamStr(0)) + 'google.mht'; // 保存MHT文件的路径

    vaIn := FilePath;
    vaOut := OleVariant(True); // 若文件已存在则覆盖

    OleCommand.Exec(nil, OLECMDID_SAVEAS, OLECMDEXECOPT_PROMPTUSER, vaIn, vaOut);
  end;
end;

点击按钮时会弹出保存对话框,我需要无对话框保存带资源的MHT文件。

我尝试了多种OLE命令组合,结果如下:

命令 OLECMDID_选项 OLECMDEXECOPT_对话框是否隐藏?是否保存为MHT?
_SAVEAS_DONTPROMPTUSER❌ 弹出❌ 仅保存HTML
_SAVEAS_PROMPTUSER❌ 弹出✅ 是
_SAVEAS_DODEFAULT❌ 弹出✅ 是
_SAVE_DONTPROMPTUSER✅ 隐藏❌ 未保存
_SAVE_PROMPTUSER✅ 隐藏❌ 未保存
_SAVE_DODEFAULT✅ 隐藏❌ 未保存

我还尝试使用execWB方法:

WB := (WebBrowser1.DefaultInterface as IWebBrowser2);
WB.ExecWB(OLECMDID_SAVEAS, OLECMDEXECOPT_DONTPROMPTUSER, vaIn, vaOut);

仍会弹出对话框,且仅能保存HTML/HTM和TXT格式,无法保存MHT。另外,对话框默认路径始终是上次保存的路径,而非指定的FilePath。

请问我哪里出错了?如何指定路径无对话框将网页保存为MHT格式?

内容的提问来源于stack exchange,提问作者GhostVento

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 10:56:07