AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Adressleiste vom IE lesen & ändern
Thema durchsuchen
Ansicht
Themen-Optionen

Adressleiste vom IE lesen & ändern

Offene Frage von "bennle"
Ein Thema von bennle · begonnen am 22. Jul 2005 · letzter Beitrag vom 9. Feb 2006
Antwort Antwort
bennle

Registriert seit: 22. Jul 2005
Ort: Kehl
139 Beiträge
 
Delphi 2007 Professional
 
#1

Adressleiste vom IE lesen & ändern

  Alt 22. Jul 2005, 21:50
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
  Mit Zitat antworten Zitat
Benutzerbild von Ultimator
Ultimator

Registriert seit: 17. Feb 2004
Ort: Coburg
1.860 Beiträge
 
FreePascal / Lazarus
 
#2

Re: Adressleiste vom IE lesen & ändern

  Alt 22. Jul 2005, 21:52
Schau mal hier, hab ich schon mal gepostet:
http://www.delphipraxis.net/internal...=241622#241622

//edit: Geht natürlich nur mitdem IE bzw. Browsern, deren Adressleiste vom Typ Edit ist
Julian J. Pracht
  Mit Zitat antworten Zitat
bennle

Registriert seit: 22. Jul 2005
Ort: Kehl
139 Beiträge
 
Delphi 2007 Professional
 
#3

Re: Adressleiste vom IE lesen & ändern

  Alt 22. Jul 2005, 22:02
Zitat von Ultimator:
Schau mal hier, hab ich schon mal gepostet:
http://www.delphipraxis.net/internal...=241622#241622

//edit: Geht natürlich nur mitdem IE bzw. Browsern, deren Adressleiste vom Typ Edit ist
Hallo,
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.
  Mit Zitat antworten Zitat
Benutzerbild von Ultimator
Ultimator

Registriert seit: 17. Feb 2004
Ort: Coburg
1.860 Beiträge
 
FreePascal / Lazarus
 
#4

Re: Adressleiste vom IE lesen & ändern

  Alt 22. Jul 2005, 22:12
Du musst dir zuerst das Handle des betreffenden IE-Fensters holen (MSDN-Library durchsuchenFindWindow).
Eventuell musst du über MSDN-Library durchsuchenEnumWindows erstmal alle Fenster zurückgeben lassen, um dann das passende IE-Fenster zu erhalten (natürlich nur, wenn mehrere IE-Fenster öffen sind/sein könnten ).
Tja, dann musst du nur noch MSDN-Library durchsuchenFindWindowEx mit Parenthandle, nil, 'Edit', nil als Parameter aufrufen.
Dann hast du schonmal das Handle der Adressleiste.
Dann wendest du einfach noch MSDN-Library durchsuchenGetWindowText an, und schon hast du die eingegebene Adresse

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
Julian J. Pracht
  Mit Zitat antworten Zitat
bennle

Registriert seit: 22. Jul 2005
Ort: Kehl
139 Beiträge
 
Delphi 2007 Professional
 
#5

Re: Adressleiste vom IE lesen & ändern

  Alt 26. Jul 2005, 15:57
Zitat von Ultimator:
Du musst dir zuerst das Handle des betreffenden IE-Fensters holen (MSDN-Library durchsuchenFindWindow).
Eventuell musst du über MSDN-Library durchsuchenEnumWindows erstmal alle Fenster zurückgeben lassen, um dann das passende IE-Fenster zu erhalten (natürlich nur, wenn mehrere IE-Fenster öffen sind/sein könnten ).
Tja, dann musst du nur noch MSDN-Library durchsuchenFindWindowEx mit Parenthandle, nil, 'Edit', nil als Parameter aufrufen.
Dann hast du schonmal das Handle der Adressleiste.
Dann wendest du einfach noch MSDN-Library durchsuchenGetWindowText an, und schon hast du die eingegebene Adresse

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
Hallo,
Leider kann ich nichts mit den MSDN Links anfangen.
Ich habe den Aufbau noch nie verstanden

Kannst du evtl einen Code zusammenstellen? Muss nicht unbedingt funktionieren! Ich würde es dann korrigieren und hier posten.

MfG
  Mit Zitat antworten Zitat
Benutzerbild von Ultimator
Ultimator

Registriert seit: 17. Feb 2004
Ort: Coburg
1.860 Beiträge
 
FreePascal / Lazarus
 
#6

Re: Adressleiste vom IE lesen & ändern

  Alt 26. Jul 2005, 19:51
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:
Syntax

HWND FindWindow(
LPCTSTR lpClassName,
LPCTSTR lpWindowName
);
Die Funktion Findwindow gibt uns also das Handle des gefundenen Fensters wieder. Weiter unten in der Beschreibung dazu lesen wir, dass wir einen Parameter mit nil füllen können. Da wir den Klassennamen haben, lassen wir lpWindowName mit nil "unbeachtet". Wir rufen also auf:
Delphi-Quellcode:
var IEHandle: HWND;
begin
 IEHandle := FindWindow('IEFrame', nil);
end;
Wir haben nun also das Handle unseres IE-Fensters, sollte alles glatt gegangen sein

So, nu brachen wa ja noch das Handle unserer Adresszeile
Also füllen wir die MSDN-Suche diesmal mit FindWindowEx, und Microsoft präsentiert uns folgendes:
Zitat:
Syntax

HWND FindWindowEx(
HWND hwndParent,
HWND hwndChildAfter,
LPCTSTR lpszClass,
LPCTSTR lpszWindow
);
Gut, das Handle des Parents haben wir ja gerade ermittelt (erster Parameter).
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 ).
Wir müssen also FindWindowEx ein paar Mal anwenden, und zwar wie folgt:

Dann sind wir insgesamt soweit:
Delphi-Quellcode:
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;
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

Wir brauchen also noch nen Buffer, wo der Text reinkommt, und dann rufen wir SendMessage auf:
Delphi-Quellcode:
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;
Wie uns das ShowMessage beweist, haben wir nun die Adresse in string(buffer) stehen.

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
Julian J. Pracht
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#7

Re: Adressleiste vom IE lesen & ändern

  Alt 27. Jul 2005, 01:51
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;
Thomas
  Mit Zitat antworten Zitat
bennle

Registriert seit: 22. Jul 2005
Ort: Kehl
139 Beiträge
 
Delphi 2007 Professional
 
#8

Re: Adressleiste vom IE lesen & ändern

  Alt 28. Jul 2005, 17:28
Hallo,
Vielen Dank und ein dickes Lob an den Ultimator!

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
  Mit Zitat antworten Zitat
TriphunEM

Registriert seit: 8. Jan 2004
147 Beiträge
 
#9

Re: Adressleiste vom IE lesen & ändern

  Alt 9. Feb 2006, 08:53
@ Ultimator

jetzt das ganze mal bitte mit dem Firefox ???

da kommt man meiner recherche nach kaum an die adressleiste ran?

mfG
  Mit Zitat antworten Zitat
Benutzerbild von Ultimator
Ultimator

Registriert seit: 17. Feb 2004
Ort: Coburg
1.860 Beiträge
 
FreePascal / Lazarus
 
#10

Re: Adressleiste vom IE lesen & ändern

  Alt 9. Feb 2006, 15:17
Zitat von TriphunEM:
@ Ultimator

jetzt das ganze mal bitte mit dem Firefox ???

da kommt man meiner recherche nach kaum an die adressleiste ran?

mfG
Hier erinnere ich mich, geschrieben zu haben, dass das nur mit IE bzw. Browsern funzt, deren Adressleiste vom Typ Edit ist. Das scheint beim FF nicht der Fall zu sein. Allerdings hab ich auch drunter gepostet, wie man rausbekommen kann, von welchem Typ die Adressleiste ist, sollte also kein Problem sein, da ranzukommen
Da aber FF Open-Source ist, kannst du dir die Quelltexte auch runterladen und darin lesen
Julian J. Pracht
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:20 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz