使用GetIEFromHWND,然后:IEWnd.Document as IHTMLDocument2得到IHTMLDocument2接口
p.s. IE的类名是IEFrame,在IEFrame里面查找类名为“Shell DocObject View”的句柄,然后再在该句柄中继续查找“Internet Explorer_Server”才可以得到IE的那个浏览控件的句柄。然后才能使用GetIEFromHWND
function GetIEFromHWND(hWnd: HWND; var IE: IWebbrowser2): HRESULT;
type
TObjectFromLResult = function(LRESULT: lResult; const IID: TIID; WPARAM: wParam; out pObject): HRESULT; stdcall;
var
hInst: THandle;
lRes: Cardinal;
MSG: Integer;
pDoc: IHTMLDocument2;
ObjectFromLresult: TObjectFromLresult;
begin
result:=S_OK;
if (hWnd<=0) then
exit;
hInst := LoadLibrary('Oleacc.dll');
if (hInst>0) then
try
@ObjectFromLresult := GetProcAddress(hInst, 'ObjectFromLresult');
MSG := RegisterWindowMessage('WM_HTML_GETOBJECT');
SendMessageTimeOut(hWnd, MSG, 0, 0, SMTO_ABORTIFHUNG, 1000, lRes);
Result := ObjectFromLresult(lRes, IID_IHTMLDocument2, 0, pDoc);
if Result = S_OK then
begin
(pDoc.parentWindow as IServiceprovider).QueryService(IWebbrowserApp, IWebbrowser2, IE);
end;
finally
FreeLibrary(hInst);
end;
end;
已知IE窗口的句柄,如何由此得到IHTMLdocument2接口?
最新推荐文章于 2013-12-10 13:15:04 发布