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