![]() |
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:
|
Re: Browser "steuern" mit Lazarus
Die einzige "Ole" die ich gefunden habe ist die hier:
Delphi-Quellcode:
Das trifft die Sache glaube nicht, oder?
{
This file is part of the Free Pascal run time library. Copyright (c) 1999-2000 by the Free Pascal development team. Implemtents some stuff of OLE2, tries to be Delphi compatible See the file COPYING.FPC, included in this distribution, for details about the copyright. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. **********************************************************************} unit ole2; {$Mode ObjFpc} interface uses windows; type IUnknown = class public function QueryInterface(const iid: TIID; var obj): HResult; virtual; {$ifndef VER0_99_10}stdcall;{$endif} abstract; function AddRef: Longint; virtual; {$ifndef VER0_99_10}stdcall;{$endif} abstract; function Release: Longint; virtual; {$ifndef VER0_99_10}stdcall;{$endif} abstract; end; implementation end. /EDIT: ich hab ja noch Delphi7 aufm Rechner drauf und da gibt es eine OleCtrls.dcu aber die scheint nicht zu funktionieren (hab sie ins Verzeichnis des Lazarus-Projektes kopiert aber er findet sie weiterhin nicht -.- ) |
Re: Browser "steuern" mit Lazarus
Zitat:
|
Re: Browser "steuern" mit Lazarus
Das Problem ist, dass der Spaß da auch nicht funktioniert (das ist scheinbar 'ne abgespeckte Schülerversion *lol* )
|
Re: Browser "steuern" mit Lazarus
Zitat:
|
Re: Browser "steuern" mit Lazarus
Es werden diverse Komponenten nicht gefunden.
(u.A. kann ich dort wo ich auswähle ob Konsolenanwendung oder DLL oder sonst was kein ActiveX auswählen - ist nicht da). |
Re: Browser "steuern" mit Lazarus
Dafür brauchst Du nur eine VCL-Formularanwendung oder eine Konsolenanwendung, kein ActiveX.
|
Re: Browser "steuern" mit Lazarus
Hmm naja egal. Das muss ja eigentlich auch mit Lazarus gehen ... begrenzendes Element scheinen die Komponenten zu sein :?
|
Re: Browser "steuern" mit Lazarus
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo, ich hab hier mal ein Beispiel gemacht, welches mit dem IE7 funktionieren sollte (beim IE8 funktionierts leider nicht, werde es dafür aber auch noch umschreiben).
Das Beispiel manipuliert den Body der zuletzt im Vordergrund gewesenen Registerkarte. [edit]Für den IE8 muss die Zeile wndChild := FindWindowEx(wndMain, 0, 'TabWindowClass', nil); durch wndChild := FindWindowEx(wndMain, 0, 'Frame Tab', nil); wndChild := FindWindowEx(wndChild, 0, 'TabWindowClass', nil); ersetzt werden[/edit] |
Re: Browser "steuern" mit Lazarus
Erstmal danke aber das nützt mir in der Form nix weil ich ja Lazarus benutze und dort nicht alle Units zur Verfügung habe.
/EDIT: ![]() /EDIT2: bei TurboPascal waren die Units als *.pas dabei. Bin eben dran die im Lazarus zu verwenden ... *durcharbeit* /EDIT3: und wie erwartet : Lazarus will die Units nicht haben. Naja egal, jetzt wo ich die Dinger eh habe kann ich das auch mit Delphi machen xD Zur Information: Delphi 7 Personal. Hab mir vorhins mozilla active x runtergeladen und es geschafft einen kleinen Browser zusammenzubauen. Kann ich nun wie oben genannt den Quellcode etc. auslesen? *ausprobier* |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:11 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