Коллеги, помогите, пожалуйста. Появилась проблема с сохранением страницы из IWebBrowser2. Я пробовал это делать двумя способами, но ни один не отработал как надо.
Дело в том, что сохраненная страница работает неправильно. Например, если сохранить гугловую страницу, то кнопка поиска, вместо генерации длинного гет запроса, будет просто редиректить на локалхост. Т.е. весь функционал кнопки пропадает олностью.
Отсюда, вопрос. Можно ли каким-то образом сделать нормальное сохранение страницы? Чтобы результат сохранения был такой же, как и при сохранении через меню эксплорера (Файл->Сохранить как), но напрямую, без соответствующего диалога.
Два метода, которые я использую для сохранения страницы:
IDispatch* iDisp;
IHTMLDocument2* Html;
IPersistFile* PFile;
wchar_t wsFileName[MAX_PATH] = {0};
MultiByteToWideChar(CP_ACP, 0, szFileName, strlen(szFileName), wsFileName, MAX_PATH);
WebBrowser->get_Document(&iDisp);
iDisp->QueryInterface(IID_IHTMLDocument2, (void**)&Html);
// HtmlSaveText(Html);
Html->QueryInterface(IID_IPersistFile, (void**)&PFile);
PFile->Save(wsFileName, true);
PFile->Release();
Html->Release();
iDisp->Release();
void HtmlSaveText( IHTMLDocument2* pDoc)
{
USES_CONVERSION;
char szFileName[MAX_PATH] = {0};
CComQIPtr< IHTMLElementCollection, &IID_IHTMLElementCollection> pAll;
pDoc->get_all( &pAll );
CComBSTR bsAll;
CComVariant v1( 0), v2;
CComQIPtr<IDispatch, &IID_IDispatch> pDisp;
pAll->item( v1, v2, &pDisp);
CComQIPtr<IHTMLElement, &IID_IHTMLElement> pElement;
pElement = pDisp;
pElement->get_outerHTML( &bsAll);
unsigned long dwWritten = 0;
char* pBuffer = (char*)malloc(bsAll.Length());
memset(pBuffer, 0, bsAll.Length());
WideCharToMultiByte(CP_ACP, 0, bsAll, -1, pBuffer, bsAll.Length(), NULL, NULL);
HANDLE hFile = CreateFile("D:\\Site.html", GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, NULL);
WriteFile(hFile, pBuffer, bsAll.Length(), &dwWritten, NULL);
CloseHandle(hFile);
free(pBuffer);
Ни один, ни другой метод не дают желаемого результата.