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
相关产品推荐
相关产品推荐

