Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.02.20;
Скачать: CL | DM;

Вниз

Как получить содержимое уже открытого internet Explorera ?   Найти похожие ветки 

 
Infinity ©   (2002-12-23 01:23) [0]

Как получить содержимое (HTML) уже открытого internet Explorera ?
На C примерно так, а как на Delphi:

::EnumChildWindows( hWnd, EnumChildProc, (LPARAM)&hWndChild );
if ( hWndChild )
{
CComPtr<IHTMLDocument2> spDoc;
LRESULT lRes;

UINT nMsg = ::RegisterWindowMessage( _T("WM_HTML_GETOBJECT") );
::SendMessageTimeout( hWndChild, nMsg, 0L, 0L, SMTO_ABORTIFHUNG, 1000, (DWORD*)&lRes );

LPFNOBJECTFROMLRESULT pfObjectFromLresult = (LPFNOBJECTFROMLRESULT)::GetProcAddress( hInst, _T("ObjectFromLresult") );
if ( pfObjectFromLresult != NULL )
{
HRESULT hr;
hr = (*pfObjectFromLresult)( lRes, IID_IHTMLDocument, 0, (void**)&spDoc );
if ( SUCCEEDED(hr) )
{
CComPtr<IDispatch> spDisp;
CComQIPtr<IHTMLWindow2> spWin;
spDoc->get_Script( &spDisp );
spWin = spDisp;
spWin->get_document( &spDoc.p );
// Change background color to red
spDoc->put_bgColor( CComVariant("red") );


 
Ihor Osov'yak ©   (2002-12-23 01:43) [1]

1. Ищем окно эксполеера, через тот же FindWindow, возможны варианты..
2. В окне ищем подокно класса Internet Explorer_Server

примерно так:

Wnd := FindWindow("IEFrame", "Lavalife - Microsoft Internet Explorer");
//ShowMessage(IntToStr(wnd));

if wnd=0 then exit;
WndChild := FindWindowEX(Wnd, 0, "Shell DocObject View", nil);
if WndChild = 0 then exit;
WndChild := FindWindowEX(WndChild, 0, "Internet Explorer_Server", nil);
if WndChild = 0 then exit;


Потом для WndChild юзаем


type
TObjectFromLResult = function(LRESULT: lResult; const IID: TIID; WPARAM:
wParam; out pObject): HRESULT; stdcall;


function GetIEFromHWND(WHandle: HWND; var IE: IWebbrowser2): HRESULT;
var
hInst: HWND;
lRes: Cardinal;
MSG: Integer;
pDoc: IHTMLDocument2;
ObjectFromLresult: TObjectFromLresult;
begin
Result := S_FALSE;
hInst := LoadLibrary("Oleacc.dll");
@ObjectFromLresult := GetProcAddress(hInst, "ObjectFromLresult");
if @ObjectFromLresult <> nil then begin
try
MSG := RegisterWindowMessage("WM_HTML_GETOBJECT");
SendMessageTimeOut(WHandle, MSG, 0, 0, SMTO_ABORTIFHUNG, 1000, lRes);
Result := ObjectFromLresult(lRes, IHTMLDocument2, 0, pDoc);
if Result = S_OK then
(pDoc.parentWindow as IServiceprovider).QueryService(IWebbrowserApp,
IWebbrowser2, IE);
finally
FreeLibrary(hInst);
end;
end;
end;



ну а для IWebbrowser2 через парсер mshtml.dll уже делаем все, что нужно...



 
Infinity ©   (2002-12-23 11:31) [2]

Большоооооое спасибо.


 
Infinity ©   (2002-12-23 11:56) [3]

Спосибо ещё за быстрый ответ. Но я в COM не силён. Что такое парсер (точное определение). И какой модуль надо включить что бы использовать Iwebbrowser , TIID , IHTMLDocument2. И обьясните вкратце как это работать с парсером ... свойство , метод ?



Страницы: 1 вся ветка

Текущий архив: 2003.02.20;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.014 c
3-63496
ArtUl
2003-02-05 02:32
2003.02.20
Вопрос по подключению к MS SQL


14-63823
Serd_hhc
2003-02-03 12:25
2003.02.20
Какую максимальную гадость мона сделать врагу?


3-63561
Engel
2003-02-01 20:34
2003.02.20
Делаю прогу, чтоб можно было взять список таблиц и полей из БД.


14-63751
aga
2003-02-05 20:55
2003.02.20
Принять


14-63839
RV
2003-02-04 21:48
2003.02.20
Князь Владимир, чертыхаясь, рулит в море на доске