Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Adressleiste vom IE lesen & ändern (https://www.delphipraxis.net/50279-adressleiste-vom-ie-lesen-aendern.html)

bennle 22. Jul 2005 22:50


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

Ultimator 22. Jul 2005 22:52

Re: Adressleiste vom IE lesen & ändern
 
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 ;)

bennle 22. Jul 2005 23:02

Re: Adressleiste vom IE lesen & ändern
 
Zitat:

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.

Ultimator 22. Jul 2005 23:12

Re: Adressleiste vom IE lesen & ändern
 
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 ;)

bennle 26. Jul 2005 16:57

Re: Adressleiste vom IE lesen & ändern
 
Zitat:

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 :wall:

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

MfG

Ultimator 26. Jul 2005 20:51

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:

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 :stupid:
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 :thuimb:).
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 :)

toms 27. Jul 2005 02:51

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;

bennle 28. Jul 2005 18:28

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

TriphunEM 9. Feb 2006 09:53

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

Ultimator 9. Feb 2006 16:17

Re: Adressleiste vom IE lesen & ändern
 
Zitat:

Zitat von TriphunEM
@ Ultimator

jetzt das ganze mal bitte mit dem Firefox ??? :shock:

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 ;)


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