Форум: "Система";
Текущий архив: 2003.02.20;
Скачать: [xml.tar.bz2];
ВнизКак получить содержимое уже открытого 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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.007 c