powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Скрин страницы, загруженной в CppWebBrowser
3 сообщений из 3, страница 1 из 1
Скрин страницы, загруженной в CppWebBrowser
    #38999582
Николай II
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Задача: сделать скрин загруженой в CppWebBrowser страницы и сохранить его в формате bmp.
Для работы с CppWebBrowser я всегда использую OLE интерфейс, так как COM выше моего уровня знаний. Но тут похоже без COM не обойтись.
Нашел код, который делает скрины картинок html станицы. Понимаю, что мне нужно сделать тоже самое, только для Body, но как переделать этот код даже ума не приложу, настолько для меня эти небоскребы непонятны! Поэтому прошу вашей помощи.
Код, который делает скрины всех картинок на странице:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
#include "mshtml.h"
#include <memory>
.....
void __fastcall TForm1::Button2Click(TObject *Sender)
{
TComInterface<IHTMLDocument2> pHTMLDocument2;
	if (SUCCEEDED(CppWebBrowser1->Document->QueryInterface(IID_IHTMLDocument2, (LPVOID*)&pHTMLDocument2)))
	{
		IHTMLElementCollection* Images = NULL;
		if (SUCCEEDED(pHTMLDocument2->get_images(&Images)) && Images)
		{
			long ImagesCount = 0;
			if (SUCCEEDED(Images->get_length(&ImagesCount)))
			{
				for (int i = 0; i < ImagesCount; i++)
				{
					IHTMLImgElement* Image = NULL;
					IDispatch* Disp = NULL;
					Variant item = i;
					Variant index = 0;
					if (SUCCEEDED(Images->item(item, index, &Disp)) && Disp)
					{
						if (SUCCEEDED(Disp->QueryInterface(IID_IHTMLImgElement,
							(void**)&Image)) && Image)
						{

							IHTMLElementRender *spElemRender;
							HRESULT hr = Image->QueryInterface(IID_IHTMLElementRender, (void**)&spElemRender);
                            if (SUCCEEDED(hr) && spElemRender)
							{
								long bm_hei, bm_wid;
								Image->get_width(&bm_wid);
								Image->get_height(&bm_hei);

								std::auto_ptr<Graphics::TBitmap> bm(new Graphics::TBitmap);
								bm->SetSize(bm_wid, bm_hei);
								spElemRender->DrawToDC(bm->Canvas->Handle);
								bm->SaveToFile(String().sprintf(L"D:\\test\\data_00%d.bmp", i));
							}
							Image->Release();
						}
						Disp->Release();
					}
				}
			}
			Images->Release();
		}
	}
}


-------------------------
C++ Builder 2010
Самоучка
...
Рейтинг: 0 / 0
Скрин страницы, загруженной в CppWebBrowser
    #38999632
Николай II
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пытался с двух разных примеров слепить один:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
#include "mshtml.h"
#include <memory>
.....
void __fastcall TForm1::Button3Click(TObject *Sender)
{
long i;
IHTMLDocument2* iDoc;
IDispatch* iDisp;
IHTMLElement* IElement;
IHTMLSelectElement* iSelectElement;
IHTMLInputElement *iInputElement;
IHTMLOptionElement* iOptionElement;
IHTMLAnchorElement* IAnchorElement;
IHTMLScriptElement *IScriptElement;
IHTMLBodyElement* IBodyElement;
IHTMLTextAreaElement* iTextAreaElement;
IHTMLImgElement* iImgElement;
IHTMLFormElement* iFormElement;
IHTMLElementCollection* iElementCollection=NULL;
if( CppWebBrowser1 ->ControlInterface->Document)
	{
	 CppWebBrowser1 ->ControlInterface->Document->QueryInterface(__uuidof( IHTMLDocument2),(void**)&iDoc);
	}
iDoc->get_all(&iElementCollection);
long p;
iElementCollection->get_length(&p);
iDoc->get_body(&IElement);

IHTMLElementRender *spElemRender;
HRESULT hr = iDoc->QueryInterface(IID_IHTMLElementRender, (void**)&spElemRender);
if (SUCCEEDED(hr) && spElemRender)
	{
	long bm_hei, bm_wid;
	bm_wid=CppWebBrowser1->Width;
	bm_hei=CppWebBrowser1->Height;

	std::auto_ptr<Graphics::TBitmap> bm(new Graphics::TBitmap);
	bm->SetSize(bm_wid, bm_hei);
	spElemRender->DrawToDC(bm->Canvas->Handle);
	bm->SaveToFile(String().sprintf(L"D:\\test\\data_00%d.bmp", i));
	}

iDoc->Release();
}


Ошибки не вызывает, но и не работает (в папке test результирующего файла нет) (((
...
Рейтинг: 0 / 0
Скрин страницы, загруженной в CppWebBrowser
    #38999652
Николай II
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Слепил! Может кому пригодиться:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
#include "mshtml.h"
#include <memory>
.....
void __fastcall TForm1::Button3Click(TObject *Sender)
{
IHTMLDocument2* iDoc;
IHTMLElement* IElement;
IHTMLElementRender *spElemRender;

CppWebBrowser1 ->ControlInterface->Document->QueryInterface(__uuidof( IHTMLDocument2),(void**)&iDoc);
iDoc->get_body(&IElement);
HRESULT hr = IElement->QueryInterface(IID_IHTMLElementRender, (void**)&spElemRender);
if (SUCCEEDED(hr) && spElemRender)
	{
	long bm_hei, bm_wid;
	bm_wid=CppWebBrowser1->Width;
	bm_hei=CppWebBrowser1->Height;

	std::auto_ptr<Graphics::TBitmap> bm(new Graphics::TBitmap);
	bm->SetSize(bm_wid, bm_hei);
	spElemRender->DrawToDC(bm->Canvas->Handle);
	bm->SaveToFile(L"D:\\test\\data.bmp");
	}

iDoc->Release();
IElement->Release();
spElemRender->Release();
}
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Скрин страницы, загруженной в CppWebBrowser
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]