![]() |
Adressleiste vom IE lesen & ändern
Hallo,
Ich bin ein ziemlicher Neuling auf dem Gebiet Delphi. Ich möchte gerne die Exploreradressleiste auslesen, damit ich das Vergleichen kann und auf einen andere URL umleiten kann. Ist dies Möglich?? MfG Benny PS: Danke für jede Antwort im vorraus |
Re: Adressleiste vom IE lesen & ändern
Schau mal hier, hab ich schon mal gepostet:
![]() //edit: Geht natürlich nur mitdem IE bzw. Browsern, deren Adressleiste vom Typ Edit ist ;) |
Re: Adressleiste vom IE lesen & ändern
Zitat:
Danke das hab ich auch schon gesehen, allerdings werde ich daraus nicht schlau, da der Quellcode nicht nachvollziehbar ist. MfG Benny Evtl kannst du mir ein Beispiel geben. |
Re: Adressleiste vom IE lesen & ändern
Du musst dir zuerst das Handle des betreffenden IE-Fensters holen (
![]() Eventuell musst du über ![]() Tja, dann musst du nur noch ![]() Dann hast du schonmal das Handle der Adressleiste. Dann wendest du einfach noch ![]() Ich hoff, ich hab mich mit den Parametern bei FindWindowEx nicht vertan, aber du weißt ja nun, wo du alles nachlesen kannst ;) Ich würde dir ja nen Quelltext geben, aber ich hab zur Zeit kein lauffähiges Delphi installiert, und der Code wäre dann doch recht verwirrend, wenn ich ihn nicht auf Fehler testen kann, und er nicht funktioniert ;) |
Re: Adressleiste vom IE lesen & ändern
Zitat:
Leider kann ich nichts mit den MSDN Links anfangen. Ich habe den Aufbau noch nie verstanden :wall: Kannst du evtl einen Code zusammenstellen? Muss nicht unbedingt funktionieren! Ich würde es dann korrigieren und hier posten. MfG |
Re: Adressleiste vom IE lesen & ändern
Okay, dann schaun wir doch mal ;)
Mit Hilfe von Assarbads EDA hab ich rausbekommen, dass der Klassenname des IE-Fensters IEFrame ist. Also werfen wir doch mal die MSDN-Suche mit dem Stichwort Findwindow an. Wir finden folgendes: Zitat:
Delphi-Quellcode:
Wir haben nun also das Handle unseres IE-Fensters, sollte alles glatt gegangen sein :)
var IEHandle: HWND;
begin IEHandle := FindWindow('IEFrame', nil); end; So, nu brachen wa ja noch das Handle unserer Adresszeile :stupid: Also füllen wir die MSDN-Suche diesmal mit FindWindowEx, und Microsoft präsentiert uns folgendes: Zitat:
Dann wollen wir ja vom ersten Kindfenster aus die Suche beginnen lassen, also setzen wir den zweiten Parameter auf 0. Den Klassennamen des Adressfensters hab ich ja schon genannt: 'Edit'. Das kommt also als 3. Parameter rein. Und mit dem 4. Parameter verfahren wir wieder wie schon bei FindWindow, den setzen wir auf nil. Allerdings haben wir ein kleineres Problem, da das Edit-Fenster kein direktes Kindfenster des IE-Fensters ist. Es liegen also noch ein paar Parents dazwischen. Allerdings müssen wir nicht bis ganz runter zum Edit suchen, denn schon die ComboBoxEx32 bietet uns den gesuchten Text :) (Herausgefunden hab ich das alles wieder mit Assarbads EDA :thuimb:). Wir müssen also FindWindowEx ein paar Mal anwenden, und zwar wie folgt: Dann sind wir insgesamt soweit:
Delphi-Quellcode:
Nun haben wir das Handle unserer ComboBoxEx32, in der schon die Adresse drinsteht. Nun rufen wir nochmal SendMesssage mit WM_GETTEXT auf, um die Adresse auch zu bekommen, und dann passt der Laden :)
var IEHandle, AdressCB: HWND;
begin IEHandle := FindWindow('IEFrame', nil); AdressCB := FindWindowEx(IEHandle, 0, 'WorkerW', nil); AdressCB := FindWindowEx(AdressCB, 0, 'ReBarWindow32', nil); AdressCB := FindWindowEx(AdressCB, 0, 'ComboBoxEx32', nil); end; Wir brauchen also noch nen Buffer, wo der Text reinkommt, und dann rufen wir SendMessage auf:
Delphi-Quellcode:
Wie uns das ShowMessage beweist, haben wir nun die Adresse in string(buffer) stehen.
procedure TForm1.Button1Click(Sender: TObject);
var IEHandle, AdressCB: HWND; buffer: array[0..MAX_PATH] of char; begin IEHandle := FindWindow('IEFrame', nil); AdressCB := FindWindowEx(IEHandle, 0, 'WorkerW', nil); AdressCB := FindWindowEx(AdressCB, 0, 'ReBarWindow32', nil); AdressCB := FindWindowEx(AdressCB, 0, 'ComboBoxEx32', nil); SendMessage(AdressCB, wm_gettext, sizeof(buffer), Integer(@buffer)); ShowMessage(string(buffer)); end; Um die Adresse zu ändern, kannst du WM_SETTEXT verwenden. So, ich glaub ich hab noch nie so eine lange Antwort geschrieben, deswegen fänd ichs nett, wenn du posten würdest, obs bei dir geht :) |
Re: Adressleiste vom IE lesen & ändern
Hi,
Das ganze geht viel einfacher und ohne FindWindow() Der FindWindow Code könnte auch in zukünftigen IE Versionen nicht merh funktionieren, wenn sie die Fensterstruktur ändert. Einfacher geht's über's IShellWindows Interface:
Delphi-Quellcode:
uses
shdocvw_tlb; procedure TForm1.Button1Click(Sender: TObject); var x: Integer; Sw: IShellWindows; begin sw := CoShellWindows.Create; for x := 0 to SW.Count - 1 do Listbox1.Items.Add((Sw.Item(x) as IWebbrowser2).LocationUrl); end; |
Re: Adressleiste vom IE lesen & ändern
Hallo,
Vielen Dank und ein dickes Lob an den Ultimator! :coder2: Allerdings funktioniert deine Variante bei mir nicht! Mein Buffer ist irgendwie immer leer :( Aber die Methode von toms funktioniert einbandfrei. Jetzt sollte ich nur noch wissen wie ich dann eine URL übergebe! Habs schon mit folgendem versucht:
Code:
(Sw.Item(x) as IWebbrowser2).Navigate('http://test.de');
Allerdings klappt das nicht! Bekomme eine Fehlermeldung! Weiß jemand ne Lösung?? MfG |
Re: Adressleiste vom IE lesen & ändern
@ Ultimator
jetzt das ganze mal bitte mit dem Firefox ??? :shock: da kommt man meiner recherche nach kaum an die adressleiste ran? mfG |
Re: Adressleiste vom IE lesen & ändern
Zitat:
![]() Da aber FF Open-Source ist, kannst du dir die Quelltexte auch runterladen und darin lesen ;) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:31 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 by Thomas Breitkreuz