![]() |
Markierten Text aus Webbrowser auslesen
Hi,
ich würde gerne folgendes realisieren. Ich habe mein Programm am Laufen und würde diesem gerne Daten aus einem Browser zur Verfügung stellen. Das heikle an der Sache ist, dass diese Daten, die direkt aus dem Browser kommen, nicht manipuliert werden dürfen. Beispiel: Im Browser steht: Max Mustermann, Musterstraße 1, 12345 Musterstadt Wenn man diese Daten nun mit Strg. + C. oder einfach über die Kopieren Funktion des Browsers in die Zwischenablage kopiert, lassen sich die Daten ja problemlos mit einem Texteditor verändern. Von dem Texteditor können die Daten ja nun wieder in die Zwischenablage kopiert werden und entsprechen damit nicht mehr den Originaldaten aus dem Browser. Wie kann ich dieses Problem umgehen ohne den Quelltext der HTML Seite weiterzuverarbeiten? Ich hoffe mir kann jemand helfen... |
Re: Markierten Text aus Webbrowser auslesen
Naja, der Weg über die Zwischenablage ist, wie du schon richtig erkannt hast, manipulierbar.
Deshalb solltest du dir die Daten direkt holen. Der offizielle Weg führt imho über das Parsen des HTML's (besser gesagt: parsen lassen). Alternativ könntest du den Browser fragen, was er denn gerade an selektiertem Text in petto hat. Es gibt hier im Forum einige Ansätze zum Thema "URL ändern beim Browser". Eventuell könntest du darüber an die Infos kommen. |
Re: Markierten Text aus Webbrowser auslesen
Hi Christian,
Zitat:
Delphi-Quellcode:
Grüße vom marabu
uses
MSHTML; function SelectedText(doc: IHTMLDocument2): String; begin with doc.selection.createRange as IHTMLTxtRange do Result := text; end; procedure TMainForm.CopyActionExecute(Sender: TObject); begin ShowMessage(SelectedText(WebBrowser.Document as IHTMLDocument2)); end; Edit: mehr Ordnung reingebracht... |
Re: Markierten Text aus Webbrowser auslesen
@marabu: Die Antwort hätte ich ihm auch gern gegeben, aber folgendes hat mich stutzig gemacht:
Zitat:
|
Re: Markierten Text aus Webbrowser auslesen
Hallo Benjamin,
Zitat:
![]() Für andere Browser-Fabrikate funktioniert der beschriebene Weg nicht. Freundliche Grüße marabu |
Re: Markierten Text aus Webbrowser auslesen
Aha, wieder was gelernt. Danke :)
|
Re: Markierten Text aus Webbrowser auslesen
Danke erstmal für die Antworten!
Es ist in der Tat so, dass ich den Code von allen verschiedenen Browser einbauen muss. Ich habe nun aber schon Probleme bei dem oben stehenden Code. Ich habe auf meinem Desktop Delphi 5, auf meinem Laptop Delphi 2005 PE und an diesem sitze ich gerade. Hier wird mir gemeldet, dass er die Unit MSHTML nicht findet. Die Datei MSHTML.dcu gibt es auch nicht auf meinem Rechner. Ich finde sowieso, dass die ganze Installiererei mit Delphi 2005 PE viel komplizierter geworden ist. Kann mir da jemand einen Tipp geben, damit ich den Code mal so testen kann? BTW: Ich habe auch den Link verfolgt und die Uses MSHTML_TLB, SHDocVw_TLB konnten ebenfalls nicht gefunden werden. |
Re: Markierten Text aus Webbrowser auslesen
Hallo Christian,
die Unit MSHTML.PAS kannst du dir selbst erstellen:
Code:
Kopiere dir die erstellten Dateien in dein Source-Verzeichnis für Komponenten und installiere sie über ein neues Package.
TLIBIMP -Fe- %windir%\system32\mshtml.tlb
marabu |
Re: Markierten Text aus Webbrowser auslesen
Zitat:
|
Re: Markierten Text aus Webbrowser auslesen
Ich habe unterstellt, dass TLIBIMP im BIN Verzeichnis deiner Delphi-Installation liegt. Wenn nicht, dann hilft dir vielleicht dieser thread:
![]() marabu |
Re: Markierten Text aus Webbrowser auslesen
Okay, mit der SHDocVw_TLB hat es geklappt aber die mshtml.tlb habe ich immer noch nicht reinbekommen. Die Datei TLIBIMP gibt´s auch nicht bei mir im BIN Verzeichnis. Wie kann ich die Datei denn sonst reinbekommen?
|
Re: Markierten Text aus Webbrowser auslesen
Liste der Anhänge anzeigen (Anzahl: 2)
Das Utility TLIBIMP.EXE wird bei D5 in das BIN-Verzeichnis installiert. Eventuell hast du die Installation unterdrückt. Auf der Installations-CD sollte es drauf sein. Der Aufruf bei D5 ist auch etwas abweichend von D7:
Code:
-A- unterdrückt das hässliche Suffix. Oder du schaust im Anhang.
tlibimp -A- %windir%\system32\mshtml.tlb
marabu |
Re: Markierten Text aus Webbrowser auslesen
Okay, nun funktioniert das.
Das funktioniert aber nur, wenn ich einen IE Browser bei mir im Programm einbaue. Wie würde das mit externen Browsern funktionieren? Das interessiert mich eigentlich viel mehr... |
Re: Markierten Text aus Webbrowser auslesen
Hast du Beitrag #5 schon gelesen?
|
Re: Markierten Text aus Webbrowser auslesen
Ja, aber bei dem Code kommt bei mir nur "Undefinierter Bezeichner: IShellWindows" :(
|
Re: Markierten Text aus Webbrowser auslesen
Bei mir nicht. Streng dich bitte etwas mehr an - immerhin musst du bald meine Rente finanzieren.
Delphi-Quellcode:
Freundliche Grüße vom marabu
uses
MSHTML, ActiveX, ShlObj; function SelectedText(doc: IHTMLDocument2): String; begin with doc.selection.createRange as IHTMLTxtRange do Result := text; end; function InternetExplorer: IWebBrowser2; var sw: IShellWindows; i: Integer; disp: IDispatch; begin sw := CoShellWindows.Create; for i := 0 to Pred(sw.Count) do begin disp := sw.Item(i); if Succeeded(disp.QueryInterface(IID_IWebBrowser2, Result)) then Exit; end; Result := nil; end; procedure TDemoForm.ButtonClick(Sender: TObject); var wb2: IWebBrowser2; begin wb2 := InternetExplorer; if Assigned(wb2) then ShowMessage(SelectedText(wb2.Document as IHTMLDocument2)); end; |
Re: Markierten Text aus Webbrowser auslesen
Liste der Anhänge anzeigen (Anzahl: 1)
Leider lässt mich Delphi nicht für deine Rente arbeiten... :roll:
|
Re: Markierten Text aus Webbrowser auslesen
Das Statement, das hier den aufkommenden Zweifel an deiner geistigen Verfassung zerstreuen würde, wäre "Ich habe die selben Sachen in den Uses wie marabu, es geht aber trotzdem nicht".
;) |
Re: Markierten Text aus Webbrowser auslesen
Drückeberger.
Dein Bild zeigt den falschen Ausschnitt aus dem Quelltext. Was hast du in der Uses-Klausel angegeben? IWebBrowser2 ist in ShDocVw deklariert. marabu @Lukas: eins rauf mit Mappe |
Re: Markierten Text aus Webbrowser auslesen
Ai, das musste auch noch dazu sagen. Ich habe gedacht, dass das alle sind, die du in die Uses reingeschrieben hast. ;) Danke trotzdem schonmal!
Nun geht das mit dem Internet Explorer, aber nicht, wenn ich den IE 2 mal auf habe. Dann wird nur der erste von beiden ausgelesen. Kann man diesen Code nun noch auf andere Browser übertragen? |
Re: Markierten Text aus Webbrowser auslesen
Zitat:
Zitat:
Zitat:
marabu |
Re: Markierten Text aus Webbrowser auslesen
Zitat:
Zitat:
|
Re: Markierten Text aus Webbrowser auslesen
Hi,
inzwischen bin ich auf folgenden Trichter gekommen: Anmerkung: Ich möchte hiermit darauf hinweisen, dass der folgende Code NICHT vom mir stammt. In einem Timer mit 10ms Interval wird geschaut, ob die Zwischenablage gefüllt ist und ob ein bestimmtes Fenster existiert. Wenn ja werden die Daten in das Memo übertragen. Hier der Code dafür:
Delphi-Quellcode:
Das Problem ist nur, dass ja ein 2.Browser geöffnet sein kann und dann kann man auch aus diesem Daten ins Programm importieren.
procedure TForm1.Timer1Timer(Sender: TObject);
var a : array[0..1024] of char; h : HWND; begin clpbrd := TClipboard.create; if clpbrd.FormatCount>0 then begin if clpbrd.GetTextBuf(a,1000)>0 then begin h:=FindWindow(nil,'Testbrowser - Mozilla Firefox'); if (h<>0) then Memo1.lines.Add(string(a)); clpbrd.clear; end; end; end; Meine Frage nun: Wie kann ich die Funktion noch an ein bestimmtes Fenster anpassen (also dass nur noch aus der Zwischenablage gelesen wird, wenn es sich auch um den Testbrowser handelt aus dem kopiert wurde)? Meine Idee hierfür ist: Wenn ich im Browser auf den Befehl kopieren gehe (egal ob der PopUp oder per Strg. + C.) muss der Fokus ja auf dem Browser liegen...vielleicht kann man das hierrüber irgendwie herausfinden?! Wäre super, wenn mir da jemand helfen könnte! |
Re: Markierten Text aus Webbrowser auslesen
Zitat:
Dad mit dem Timer gefaellt mir nicht. Vom System werden ![]() |
Re: Markierten Text aus Webbrowser auslesen
eventuell auch nicht nur prüfen ob ein Fenster existiert, sondern auch ob es im Vordergrund ist
Greets |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:41 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