![]() |
Browser "steuern" mit Lazarus
Hallo zusammen
(hoffentlich ist das hier der richtige Bereich^^) Ich möchte mit Lazarus meinen Browser bzw. einen Tab oder ein Fenster im Browser steuern. Browser: Mozilla Firefox 3.0.3 (jeder andere Browser wäre mir auch recht aber FF würde ich bevorzugen) IDE: Lazarus Free Pascal 0.9.22 Beta Unter "steuern" verstehe ich:
Das ganze ginge sicher auch über JavaScript irgendwie zu machen aber ich bin ehrlich gesagt zu faul mich mit JavaScript auseinanderzusetzen. Und da ich am besten Ahnung von Pascal / Object Pascal / Delphi (oder wie immer man das nenne will) habe, möchte ich es damit machen. Was ich suche:
Also wer was hat dann immer rein damit :dp: |
Re: Browser "steuern" mit Lazarus
Liste der Anhänge anzeigen (Anzahl: 1)
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; |
Re: Browser "steuern" mit Lazarus
Klingt schonmal relativ kompliziert :|
In der pas-Datei seh ich nicht wirklich durch ... Aber der Code den du gepostet hast, der ist verständlich :mrgreen: Kannst du mir vielleicht sagen wie ich zB an den Quellcode des im aktiven Tab befindlichen HTML-Dokumentes komme (mit welcher Methode etc.) oder eine URL in einen Tab lade? |
Re: Browser "steuern" mit Lazarus
Liste der Anhänge anzeigen (Anzahl: 1)
Delphi-Quellcode:
Damit hast Du jetzt den HTML-Body.
while iwbIE.ReadyState <> 4 do //ka ob das so jetzt richtig ist
Application.ProcessMessages; htmldDocument := iwbIE.Document as IHtmlDocument2; while htmldDocument.ReadyState <> 'complete' do Application.ProcessMessages; htmlBodyCode := htmldDocument.body; Die Unit aus dem ersten Beitrag, und die ich jetzt nch angehangen habe (leider vergessen) musst Du nur einbinden(beides Typlib). |
Re: Browser "steuern" mit Lazarus
Zitat:
Von welchem Typ ist htmleBodyCode? Kann ich den Inhalt in ein Memo-Feld ausgeben? Wenn ja wie? (Aber ich glaube schonmal das geht in die Richtung wie ich es angedacht habe). |
Re: Browser "steuern" mit Lazarus
htmleBodyCode.innerHTML ist ein WideString
|
Re: Browser "steuern" mit Lazarus
Inwiefern ist ein Widestring mit Memo.Lines (müsste TStrings oder so sein) kompatibel?
/EDIT: Kann mir einer aus dem Stehgreif sagen, wie ich die beiden *.pas einbinde? Hab sowas noch nie gemacht :? |
Re: Browser "steuern" mit Lazarus
So wie ich das weiß, müsste das ganz einfach mit String := WideString gehen.
Delphi-Quellcode:
uses
ActiveX, Shdocvw_tlb, MSHTML_TLB; |
Re: Browser "steuern" mit Lazarus
Hab das eben mal versuchen wollen aber es kommen nur zwei Fehler:
Zitat:
|
Re: Browser "steuern" mit Lazarus
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:40 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz