Einzelnen Beitrag anzeigen

TurboMartin

Registriert seit: 13. Feb 2006
Ort: Bad Honnef
765 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Browser "steuern" mit Lazarus

  Alt 3. Okt 2008, 14:23
Für den IE könnte ich dir mit folgendem helfen:

Delphi-Quellcode:
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;
Angehängte Dateien
Dateityp: pas mshtml_tlb_104.pas (2,08 MB, 27x aufgerufen)
Tomorrow will be cancelled due to lack of interest.

  Mit Zitat antworten Zitat