Reputation: 21
My code:
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); // Передаем True для перезаписи файла, если он уже существует
OleCommand.Exec(nil, OLECMDID_SAVEAS, OLECMDEXECOPT_PROMPTUSER, vaIn, vaOut);
end;
end;
When you click the button, a dialog box for saving the web page opens. I need to save web page with resources in MHT without dialog boxes.
commandOLECMDID_ |
optionOLECMDEXECOPT_ |
dialog box hidden? |
saves MHT? |
---|---|---|---|
_SAVEAS |
_DONTPROMPTUSER |
❌ appears | ❌ only HTML |
_SAVEAS |
_PROMPTUSER |
❌ appears | ✅ yes |
_SAVEAS |
_DODEFAULT |
❌ appears | ✅ yes |
_SAVE |
_DONTPROMPTUSER |
✅ | ❌ don't save at all |
_SAVE |
_PROMPTUSER |
✅ | ❌ don't save at all |
_SAVE |
_DODEFAULT |
✅ | ❌ don't save at all |
I tried to use execWB
like this:
WB := (WebBrowser1.DefaultInterface as IWebBrowser2);
WB.ExecWB(OLECMDID_SAVEAS, OLECMDEXECOPT_DONTPROMPTUSER, vaIn, vaOut);
Dialog box also appears and what's most important it saves only html/htm and txt, no MHT.
Default path in dialog box is always the path where the file was last saved, not FilePath
's content.
What do I wrong? How to save a web page in FilePath
as MHT
format without showing a dialog box? Complete project on GitHub.
Upvotes: 2
Views: 111