type
TObjectFromLResult =
function(LRESULT: lResult;
const IID: TIID; wParam: wParam;
out pObject): HRESULT;
stdcall;
function TfrmMain.GetIEFromHWND(WHandle: HWND;
var IE: IWebbrowser2): HRESULT;
var
hInst: HWND;
lRes: Cardinal;
Msg: Integer;
pDoc: IHTMLDocument2;
ObjectFromLresult: TObjectFromLresult;
begin
//OLE-DLL laden
hInst := LoadLibrary('
Oleacc.dll');
@ObjectFromLresult := GetProcAddress(hInst, '
ObjectFromLresult');
//geladen?
if @ObjectFromLresult <>
nil then
begin
try
//Message-Handler
Msg := RegisterWindowMessage('
WM_HTML_GETOBJECT');
SendMessageTimeOut(WHandle, Msg, 0, 0, SMTO_ABORTIFHUNG, 1000, lRes);
Result := ObjectFromLresult(lRes, IHTMLDocument2, 0, pDoc);
//Rückgabe
if Result = S_OK
then
(pDoc.parentWindow
as IServiceprovider).QueryService(IWebbrowserApp,
IWebbrowser2, IE);
finally
//OLE-DLL entladen
FreeLibrary(hInst);
end;
end;
end;
procedure Work(Sender: TObject);
var
wndMain: hWnd;
wndChild: hWnd;
htmldDocument: IHtmlDocument2;
iwbIE: IWebBrowser2;
htmleBodyCode: IHTMLElement;
begin
//IE suchen
wndMain := FindWindow('
IEFrame',
nil);
if wndMain <> 0
then
begin
//Tab suchen, welcher sich zur Zeit im Vordergrund befindet
wndChild := FindWindowEx(wndMain, 0, '
TabWindowClass',
nil);
wndChild := FindWindowEx(wndChild, 0, '
Shell DocObject View',
nil);
wndChild := FindWindowEx(wndChild, 0, '
Internet Explorer_Server',
nil);
//Tab gefunden?
if wndChild <> 0
then
begin
//IEInterface bekommen
GetIEFromHWnd(WndChild, iwbIE);
if iwbIE <>
nil then
begin
//hier kannst du dann mit iwbIE arbeiten
end;
end;
end;
end;