VBA: hwnd bekannt, Url und Seite auslesen

Hallo Wissende,

mit nachfolgendem zusammengebastelten Code kann ich die hwnd und Titel von laufenden IE und Mozilla-Browsern auslesen.

a) Wie kann ich nun ermitteln auf welche URL-Adressen die Browser gerade zugreifen?
b) Wie kann ich die gerade aktuelle Seite im Browser auslesen
c) Bei Frames auf der Seite, wie kann ich diese auslesen?
d) Ist es möglich bei Änderungen in b) c) automatisch zu aktualisieren, also nochmals auszulesen, quasi eine Überwachung?

( d) ist u.a. wegen http://www.wer-weiss-was.de/cgi-bin/forum/showarticl… )

Danke & schönes neues Jahr für Euch Alle
Gruß Reinhard

Option Explicit
Private Const GW\_HWNDNEXT = 2
Private Const GW\_HWNDFIRST = 0
Private Declare Function FindWindow \_
 Lib "user32" Alias \_
 "FindWindowA" ( \_
 ByVal lpClassName As String, \_
 ByVal lpWindowName As String \_
 ) As Long
Private Declare Function GetWindowText \_
 Lib "user32" Alias \_
 "GetWindowTextA" ( \_
 ByVal hwnd As Long, \_
 ByVal lpString As String, \_
 ByVal cch As Long \_
 ) As Long
Private Declare Function GetWindow \_
 Lib "user32" ( \_
 ByVal hwnd As Long, \_
 ByVal wCmd As Long \_
 ) As Long
Private Declare Function GetClassName \_
 Lib "user32" Alias \_
 "GetClassNameA" ( \_
 ByVal hwnd As Long, \_
 ByVal lpClassName As String, \_
 ByVal nMaxCount As Long \_
 ) As Long
'
Sub tt()
Dim hwnd As Long, strCaption As String, lngLen As Long, strClass As String
Dim Zei As Long
Cells.ClearContents
If hwnd = 0 Then
 hwnd = FindWindow(vbNullString, vbNullString)
End If
hwnd = GetWindow(hwnd, GW\_HWNDFIRST)
Do While hwnd 0
 strClass = String(255, 0)
 lngLen = GetClassName(hwnd, strClass, Len(strClass))
 strClass = Left(strClass, lngLen)
 strCaption = String(255, 0)
 lngLen = GetWindowText(hwnd, strCaption, Len(strCaption))
 strCaption = Left(strCaption, lngLen)
 If strClass = "IEFrame" Then MsgBox "IE" & hwnd
 If strClass = "MozillaUIWindowClass" Then MsgBox "MZ" & hwnd
 Zei = Zei + 1
 Range("A" & Zei) = strClass
 Range("B" & Zei) = strCaption
 hwnd = GetWindow(hwnd, GW\_HWNDNEXT)
Loop
End Sub

Hallo Reinhard,

vorweg eine Bemerkung, Du mischst gerade munter zwei Themen. :smile:
1.) Fenster und deren Inhalt.
2.) Internetseiten, HTML …

Bei den Fenstern sehe ich inzwischen einigermaßen durch, bei HTML nicht genug um helfen zu können.

mit nachfolgendem zusammengebastelten Code kann ich die hwnd
und Titel von laufenden IE und Mozilla-Browsern auslesen.

a) Wie kann ich nun ermitteln auf welche URL-Adressen die
Browser gerade zugreifen?

Die Adessleiste auslesen? Die hat mit Sicherheit auch ein Handle.

b) Wie kann ich die gerade aktuelle Seite im Browser auslesen

Das wird doch meist gleich sein?

c) Bei Frames auf der Seite, wie kann ich diese auslesen?

HTML. :smile:

d) Ist es möglich bei Änderungen in b) c) automatisch zu
aktualisieren, also nochmals auszulesen, quasi eine
Überwachung?

Ich nehme an, ja. Ich glaube, es ist möglich, den Browser per Subclassing so zu überwachen, daß ein Ereignis ausgelöst wird, wenn die Seite aktualisiert wird. Für mich wäre das eine Arbeit von ein paar Wochen mit ungewissem Ausgang. Ich würde bei AVB fragen und es vermutlich irgendwann schaffen. Wenn es nicht so Zeitkritisch ist, kann man mit einem Timer z.B. jede Sekunde prüfen, das ist einfacher, aber eben nur zeitgesteuert, kostet Rechenzeit … die ‚Bastellösung‘. :smile:

Noch ein wenig Code. Wenn Du zu dem gefundenen Fenster die Handles der Elemente suchst, sieh Dir das http://www.activevb.de/tipps/vb6tipps/tipp0215.html mal an, da wird das beschrieben.

Gruß, Rainer

Hallo Rainer,

ich wünsche dir ein gesundes 2008 ff.

vorweg eine Bemerkung, Du mischst gerade munter zwei Themen.

-)

1.) Fenster und deren Inhalt.
2.) Internetseiten, HTML …

Ja, das weiß ich bin da aber nicht alleine :smile:))
Man sieht es u.a. in/an den Betreffs zu dieser Thematik, für mich und andere ist das alles das Gleiche, egal Fensterinhalt Internetseiteninhalt, Frameinhalt.
Sicher, man könnte sich mal genauer damit auseinandersetzen… *gg*

Bei den Fenstern sehe ich inzwischen einigermaßen durch, bei
HTML nicht genug um helfen zu können.

Das reicht mir doch dicke, beziehe einfach a) bis d) auf Fenster :smile:

a) Wie kann ich nun ermitteln auf welche URL-Adressen die
Browser gerade zugreifen?

Die Adessleiste auslesen? Die hat mit Sicherheit auch ein
Handle.

Schön, wie kriege ich das und dann den Inhalt der Leiste?

b) Wie kann ich die gerade aktuelle Seite im Browser auslesen

Das wird doch meist gleich sein?

Nein, wenn ich z.B. hier im Forum bin, sehe ich zumindest 4 Frames.
Oben rechts z.B. Visual Basic, mit Rechtklick kann ich mir den Quelltext der Artikel anschauen.
In der Mitte oben habe ich die Artikelliste, auch die kann ich mir anschauen.
Links die Gesamtauswahl von w-w-w kann ich mir nicht ansehen (Quellcode), zumindest beim IE passiert nichts wenn ich auf Quellcode anschauen gehe.
Meine Frage ist, wie kann ich die 4 Frames auslesen.

c) Bei Frames auf der Seite, wie kann ich diese auslesen?

HTML. :smile:

d) Ist es möglich bei Änderungen in b) c) automatisch zu
aktualisieren, also nochmals auszulesen, quasi eine
Überwachung?

Ich nehme an, ja. Ich glaube, es ist möglich, den Browser per
Subclassing so zu überwachen, daß ein Ereignis ausgelöst wird,
wenn die Seite aktualisiert wird. Für mich wäre das eine
Arbeit von ein paar Wochen mit ungewissem Ausgang. Ich würde
bei AVB fragen und es vermutlich irgendwann schaffen. Wenn es
nicht so Zeitkritisch ist, kann man mit einem Timer z.B. jede
Sekunde prüfen, das ist einfacher, aber eben nur
zeitgesteuert, kostet Rechenzeit … die ‚Bastellösung‘. :smile:

Sicher, zeitgesteuert alle X Sekunden nachzuschauen ist nur ide zweitbeste Lösung. Ereignisgesteuert (Ereignis=Änderung) wäre natürlich viel besser.
Ich weiß jetzt nicht wie alle Chats funktionieren. Ich weiß von einigen, daß *ähem* ich fange mal anders an.
Eine Html-Seite lädt man auf einen Server hoch. Durch Auswahl der Url kann ich mir diese Seite dann im Browser anschauen, d.h. sie wird heruntergeladen und im Cache des Rechners gespeichert.
Entweder manuell oder vom Browser zeitgesteuert wird die Seite aktualisiert.
Bei Chats wird irgendwie „getrickst“, d.h. der Browser lädt z.B. das Chatfenster, bekommt aber vom Chatserver die an sich falsche Information daß das Herunterladen noch nicht beendet ist und bleibt in permanenter Verbindung.

Ich kann, leider nur den IE, keine anderen Browser mit CreateObject starten, zu einer URL navigieren und die Seite mit InnerText o.ä. auslesen.
Bei Chatfenstern scheitert das leider, zumindest da wo ich es probierte. Beim hiesigen Community-Chat habe ich es noch nicht ausprobiert.
Leider habe ich durch ein selbstverschuldetes Hardwaregemetzel sehr guten Code diesbezüglich verloren.
JAAA, das Wort Datensicherung hörte ich schon mal *ggg*

Noch ein wenig Code. Wenn Du zu dem gefundenen Fenster die
Handles der Elemente suchst, sieh Dir das
http://www.activevb.de/tipps/vb6tipps/tipp0215.html mal an, da
wird das beschrieben.

Ich werde das nachher testen.
Leider glaube ich nicht daß mir der Code den Inhalt der Adressleiste eines Browsers liefert :frowning:

Danke & Gruß
Reinhard

Hallo Reinhard,

ich wünsche dir ein gesundes 2008 ff.

danke, Dir auch. :smile:

Schön, wie kriege ich das und dann den Inhalt der Leiste?

Hast Du schon, wenn Du Dir das Beispiel von AVB angesehen hast.

b) Wie kann ich die gerade aktuelle Seite im Browser auslesen

Das wird doch meist gleich sein?

Nein, wenn ich z.B. hier im Forum bin, sehe ich zumindest 4
Frames.

Entweder sind das vier Handles oder Du bekommst beim Auslesen den gesamten Text.

Oben rechts z.B. Visual Basic, mit Rechtklick kann ich mir den
Quelltext der Artikel anschauen.

Das ist eine andere Information, als die, die Du über die Fenster bekommst. Im Fenster wirst Du nur den angezeigten Text finden, nicht den HTML-Code, der den Text erzeugt hat.

In der Mitte oben habe ich die Artikelliste, auch die kann ich
mir anschauen.
Links die Gesamtauswahl von w-w-w kann ich mir nicht ansehen
(Quellcode), zumindest beim IE passiert nichts wenn ich auf
Quellcode anschauen gehe.
Meine Frage ist, wie kann ich die 4 Frames auslesen.

Hab’ich noch nicht versucht. Das Beispiel zeigt Dir, wie Du an die angezeigten Texte kommst, wenn ich es richtig verstanden habe.

Sicher, zeitgesteuert alle X Sekunden nachzuschauen ist nur
ide zweitbeste Lösung. Ereignisgesteuert (Ereignis=Änderung)
wäre natürlich viel besser.
Ich weiß jetzt nicht wie alle Chats funktionieren. Ich weiß
von einigen, daß *ähem* ich fange mal anders an.
Eine Html-Seite lädt man auf einen Server hoch. Durch Auswahl
der Url kann ich mir diese Seite dann im Browser anschauen,
d.h. sie wird heruntergeladen und im Cache des Rechners
gespeichert.
Entweder manuell oder vom Browser zeitgesteuert wird die Seite
aktualisiert.
Bei Chats wird irgendwie „getrickst“, d.h. der Browser lädt
z.B. das Chatfenster, bekommt aber vom Chatserver die an sich
falsche Information daß das Herunterladen noch nicht beendet
ist und bleibt in permanenter Verbindung.

Ich kann, leider nur den IE, keine anderen Browser mit
CreateObject starten, zu einer URL navigieren und die Seite
mit InnerText o.ä. auslesen.
Bei Chatfenstern scheitert das leider, zumindest da wo ich es
probierte. Beim hiesigen Community-Chat habe ich es noch nicht
ausprobiert.

Über Chats weiß ich leider gar nichts. Ich nehme aber an, daß Du den angezeigten Text bekommst, wenn Du über die Fensterinhalte ausliest.

Leider habe ich durch ein selbstverschuldetes Hardwaregemetzel
sehr guten Code diesbezüglich verloren.
JAAA, das Wort Datensicherung hörte ich schon mal *ggg*

*gg* Hab’ ich privat auch nicht.

Noch ein wenig Code. Wenn Du zu dem gefundenen Fenster die
Handles der Elemente suchst, sieh Dir das
http://www.activevb.de/tipps/vb6tipps/tipp0215.html mal an, da
wird das beschrieben.

Ich werde das nachher testen.
Leider glaube ich nicht daß mir der Code den Inhalt der
Adressleiste eines Browsers liefert :frowning:

Ich denke, daß Du damit alle sichtbaren Zeichen im Browserfenster findest. Nicht mehr, aber auch nicht weniger. :smile:

Gruß, Rainer

Hallo Reinhard,

Chat ist nicht gleich Chat und jeder Chat arbeitet anders! Wenn man wüsste um was für ein Chat es sich handelt, koennte man sich das einmal anschauen und dann etwas probieren.

Alternativ koenntest du einen Hook schreiben, der alle MSG an die betroffenen Fenster ausliest und dann entsprechend weiter darauf agieren.
Rein Theor. sollte das so klappen:smile:

Aber sowas ist nicht mal eben in 1 oder 2 Stunden gemacht :s

MfG Alex

Hallo Rainer,

Schön, wie kriege ich das und dann den Inhalt der Leiste?

Hast Du schon, wenn Du Dir das Beispiel von AVB angesehen
hast.

leider trat ein was ich befürchtete, mit dem Code von AVB erhalte ich die gleichen Informationen wie mit meinem Code, also nicht die aktuelle URL der Browser :frowning:

PS: Info zu VB --> Vba
Excel-Vba konnte das Modul Modul1.bas problemlos importieren, nur die Form1.frm/frx weigerte es sie zu importieren.
Userform1.hwnd bzw. im Initialcode der Userform Me.hwnd gibt es nicht.
Also strickte ich den Code wie nachfolgend zu sehen um.

Gruß
Reinhard

'Dieser Source stammt von http://www.activevb.de
'und kann frei verwendet werden. Für eventuelle Schäden
'wird nicht gehaftet.
'
Option Explicit
'
Private Declare Function GetWindowTextLength Lib \_
 "user32" Alias "GetWindowTextLengthA" (ByVal \_
 hwnd As Long) As Long
' 
Declare Function GetWindowText Lib "user32" Alias \_
 "GetWindowTextA" (ByVal hwnd As Long, ByVal \_
 lpString As String, ByVal cch As Long) As Long
'
Private Declare Function EnumChildWindows Lib "user32" \_
 (ByVal hWndParent As Long, ByVal lpEnumFunc \_
 As Long, ByVal lParam As Long) As Long
' 
Private Declare Function GetClassName Lib "user32" Alias \_
 "GetClassNameA" (ByVal hwnd As Long, ByVal \_
 lpClassName As String, ByVal nMaxCount As Long) \_
 As Long
'
Public Declare Function GetFocus Lib "user32" () As Long
'
Public Child() As Long
'
Sub test()
Call Init(0)
End Sub
'
Public Function Init(hwnd&amp:wink:
 Dim Zei, x&, Class$, Result&, l&, Cpt$
 ReDim Child(0 To 0)

 'LB.Clear
 Call EnumChildWindows(hwnd, AddressOf EnumChilds, 0)
 If UBound(Child) \> 0 Then
 For x = 0 To UBound(Child) - 1
 Class = Space$(128)
 Result = GetClassName(Child(x), Class, 128)
 Class = LCase(Left$(Class, Result))
 l = GetWindowTextLength(Child(x)) + 1
 Cpt = String$(l, Chr$(32))
 Result = GetWindowText(Child(x), Cpt, l)
 If Result 0 Then
 Cpt = Left$(Cpt, Result)
 Else
 Cpt = ""
 End If
 Zei = Zei + 1
 Range("C" & Zei) = Child(x) & " Klasse:" & Class & " Caption:" & Cpt

 'MsgBox Child(x) & " Klasse:" & Class & " Caption:" & Cpt
 'LB.AddItem Child(x) & " Klasse:" & Class & " Caption:" & Cpt
 Next x
 End If
End Function
'
Public Function EnumChilds(ByVal ChWnd&, ByVal lParam&amp:wink: As Long
 Child(UBound(Child)) = ChWnd
 ReDim Preserve Child(0 To UBound(Child) + 1)
 EnumChilds = 1
End Function

Frohes neues @ Alex,

Chat ist nicht gleich Chat und jeder Chat arbeitet anders!
Wenn man wüsste um was für ein Chat es sich handelt, koennte
man sich das einmal anschauen und dann etwas probieren.

gut, nehmen wir zum Anfang den naheliegensten Chat:
http://chat.wer-weiss-was.de/cgi-bin/www/chat.fpl?op…

Alternativ koenntest du einen Hook schreiben, der alle MSG an
die betroffenen Fenster ausliest und dann entsprechend weiter
darauf agieren.
Rein Theor. sollte das so klappen:smile:

Aber sowas ist nicht mal eben in 1 oder 2 Stunden gemacht :s

Derzeit wäre ich schon froh Code zu haben, der auf dem Rechner prüft welcher Browser gerade den o.g. Chat in einem Fenster anzeigt und dann das eigentliche Chatfenster in der die Texte der Chatter stehen ausliest und ggfs. auch die anderen Framefenster der Chatseite, z.B. die Raumliste.

Gruß
Reinhard

MfG Alex

Hallo Reinhard,

leider trat ein was ich befürchtete, mit dem Code von AVB
erhalte ich die gleichen Informationen wie mit meinem Code,
also nicht die aktuelle URL der Browser :frowning:

ich hab’s mir angesehen Du bekommst alle Handles und deren Titel! Um die Texte zu bekommen musst Du die mit Hilfe der Handles und SendMessage - GetText anfordern. Ganz habe ich das aber auch noch nicht zusammen bekommen.

PS: Info zu VB --> Vba
Excel-Vba konnte das Modul Modul1.bas problemlos importieren,
nur die Form1.frm/frx weigerte es sie zu importieren.
Userform1.hwnd bzw. im Initialcode der Userform Me.hwnd gibt
es nicht.

Das ist klar, VBA hat keine Handles. Du willst ja aber auch den Browser auslesen und nicht Deine eigene Form und der Browser hat ja ein Handle, das Du auch schon hast. Der Code liefert Dir die Child-Handles.

Also strickte ich den Code wie nachfolgend zu sehen um.

Ich neme mal den Pre-Tag raus und kommentiere.

Dieser Source stammt von http://www.activevb.de
'und kann frei verwendet werden. Für eventuelle Schäden
'wird nicht gehaftet.

Option Explicit

Private Declare Function GetWindowTextLength Lib _
„user32“ Alias „GetWindowTextLengthA“ (ByVal _
hwnd As Long) As Long

Declare Function GetWindowText Lib „user32“ Alias _
„GetWindowTextA“ (ByVal hwnd As Long, ByVal _
lpString As String, ByVal cch As Long) As Long

Private Declare Function EnumChildWindows Lib „user32“ _
(ByVal hWndParent As Long, ByVal lpEnumFunc _
As Long, ByVal lParam As Long) As Long

Private Declare Function GetClassName Lib „user32“ Alias _
„GetClassNameA“ (ByVal hwnd As Long, ByVal _
lpClassName As String, ByVal nMaxCount As Long) _
As Long

Public Declare Function GetFocus Lib „user32“ () As Long

Public Child() As Long

Sub test()
Call Init(0)
End Sub

Public Function Init(hwnd&amp:wink:

Ja. An hwnd musst Du hier das Handle des Browsers übergeben.

Dim Zei, x&, Class$, Result&, l&, Cpt$
ReDim Child(0 To 0)

'LB.Clear
Call EnumChildWindows(hwnd, AddressOf EnumChilds, 0)
If UBound(Child) > 0 Then
For x = 0 To UBound(Child) - 1

Child(x) sind die Handles, den anderen Code hier brauchst Du nicht.
Dafür musst Du mit Sendmesage den Text holen.

Next x
End If
End Function

Public Function EnumChilds(ByVal ChWnd&, ByVal lParam&amp:wink: As
Long
Child(UBound(Child)) = ChWnd
ReDim Preserve Child(0 To UBound(Child) + 1)
EnumChilds = 1
End Function

Gruß, Rainer

Hallo Rainer,

ich hab’s mir angesehen Du bekommst alle Handles und deren
Titel! Um die Texte zu bekommen musst Du die mit Hilfe
der Handles und SendMessage - GetText anfordern. Ganz habe ich
das aber auch noch nicht zusammen bekommen.

aha, sehr schön, es besteht also noch Hoffnung :smile:

PS: Info zu VB --> Vba
Excel-Vba konnte das Modul Modul1.bas problemlos importieren,
nur die Form1.frm/frx weigerte es sie zu importieren.
Userform1.hwnd bzw. im Initialcode der Userform Me.hwnd gibt
es nicht.

Das ist klar, VBA hat keine Handles. Du willst ja aber auch
den Browser auslesen und nicht Deine eigene Form und der
Browser hat ja ein Handle, das Du auch schon hast. Der Code
liefert Dir die Child-Handles.

In dem AVB-Code stand in der Form.frm im Codemodul der Form:
Call Init(Me.hwnd, List1)
Dies klappt nicht in Vba weil es kein .hwnd gibt.
Seltsamerweise gibt es aber, wenn ich in der Userform ein Webbrowser-Steuerelement einfüge ein
Webbrowser1.HWND
Zur Laufzeit der Userform wollte ich mit
msgBox Webbrowser1.HWND
dies aanzeigen lassen, gab aber Fehlermeldung. Vbahilfe zu HWND gibt es leider nicht.

Sub test()
Call Init(0)
End Sub

Public Function Init(hwnd&amp:wink:

Ja. An hwnd musst Du hier das Handle des Browsers übergeben.

Würde ich ja gern, aber ich kriege doch das Handle erst durch Init() und mit Call Init(0) klappt es ja !?

Call EnumChildWindows(hwnd, AddressOf EnumChilds, 0)
If UBound(Child) > 0 Then
For x = 0 To UBound(Child) - 1

Child(x) sind die Handles, den anderen Code hier brauchst Du
nicht.

Die Funktion EnumChilds usw. muß ich mir mal sehr genau anschauen.

Dafür musst Du mit Sendmesage den Text holen.

Klingt so logisch wie auf Start klicken um Windows zu beenden *smile*

Gruß
Reinhard

Hallo Reinhard,

aha, sehr schön, es besteht also noch Hoffnung :smile:

ja, aber das wird noch etwas dauern, heute bin ich mal wieder unausgeschlafen. :frowning:

In dem AVB-Code stand in der Form.frm im Codemodul der Form:
Call Init(Me.hwnd, List1)
Dies klappt nicht in Vba weil es kein .hwnd gibt.

Ja, ist so.

Seltsamerweise gibt es aber, wenn ich in der Userform ein
Webbrowser-Steuerelement einfüge ein
Webbrowser1.HWND
Zur Laufzeit der Userform wollte ich mit
msgBox Webbrowser1.HWND
dies aanzeigen lassen, gab aber Fehlermeldung. Vbahilfe zu
HWND gibt es leider nicht.

Dann übergib das Handle doch erst mal an eine Variable. Das Handle ist ein Long.

Würde ich ja gern, aber ich kriege doch das Handle erst durch
Init() und mit Call Init(0) klappt es ja !?

Als ich gestern etwas getestet habe, habe ich mir das Handle von Firefox mit FindWindow() geholt und den w-w-w Titel zum Suchen eingetippt. :smile: Mit einigen Umwegen, die ich nie aus dem Kopf zusammenbekomme, ist das Handle auch mit dem Namen der Anwenung zu finden.

Call EnumChildWindows(hwnd, AddressOf EnumChilds, 0)
If UBound(Child) > 0 Then
For x = 0 To UBound(Child) - 1

Child(x) sind die Handles, den anderen Code hier brauchst Du
nicht.

Die Funktion EnumChilds usw. muß ich mir mal sehr genau
anschauen.

Ja, ich auch. :smile:

Dafür musst Du mit Sendmesage den Text holen.

Klingt so logisch wie auf Start klicken um Windows zu beenden
*smile*

Genauer habe ich es noch nicht. Ich tu einfach so, als wäre das kein Problem, wenn ich Glück habe merkt Niemand, daß ich noch keine Ahnung habe. :smile: Ich weiß, daß ich schon mal mit Sendmessage einen Text aus einem Notepad gelesen, ihn verändert und zurückgeschrieben habe. Der Code muss hier irgendwo sein, wenn ich den nur finden würde …

Gruß, Rainer

Nachtrag
Hallo Reinhard,

jetzt habe ich doch ganz vergessen, Dir den Code zu zeigen, der mit Sendmessage den Text holt, auch von AVB:

'Dieser Source stammt von http://www.activevb.de
'und kann frei verwendet werden. Für eventuelle Schäden
'wird nicht gehaftet.

'Um Fehler oder Fragen zu klären, nutzen Sie bitte unser Forum.
'Ansonsten viel Spaß und Erfolg mit diesem Source !

Option Explicit

Private Declare Function SendMessage Lib "user32" Alias \_
 "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal \_
 wParam As Long, ByVal lParam As Any) As Long

Private Const EM\_GETLINE As Long = &HC4&
Private Const EM\_GETLINECOUNT As Long = &HBA&
Private Const MAX\_CHAR\_PER\_LINE As Long = &H100&

Private Sub Command1\_Click()
 Dim Max As Long, X As Long

 Max = SendMessage(Text1.hwnd, EM\_GETLINECOUNT, 0, 0&amp:wink: - 1
 List1.Clear

 For X = 0 To Max
 List1.AddItem GetLine(Text1, X)
 Next X
End Sub

Private Sub List1\_Click()
 Label1.Caption = List1.List(List1.ListIndex)
End Sub

Function GetLine(Text As TextBox, ByVal Line&amp:wink: As String
 Dim Lo As Long, Hi As Long
 Dim Result As Long
 Dim Buff As String

 Lo = MAX\_CHAR\_PER\_LINE And &HFF
 Hi = Int(MAX\_CHAR\_PER\_LINE / &H100)
 Buff = Chr$(Lo) & Chr$(Hi) & Space$(MAX\_CHAR\_PER\_LINE - 2)

 Result = SendMessage(Text.hwnd, EM\_GETLINE, Line, Buff)
 GetLine = Left$(Buff, Result)
End Function

Text As TextBox muss natürlich durch Hwnd& ersetzt werden, und Text.hwnd ebenfalls. Das Handle, das übergeben wird ist im anderen Beispiel das Child(x), ich hab’s aber noch nicht geschafft die beiden Programme zusammenzuschrauben. Probier Du mal, eventuell bist Du ja konzentrierter als ich. :smile:

Gruß, Rainer

Hallo Rainer,

ich kam noch zu keinem Fortschritt.

Max = SendMessage(Text1.hwnd, EM_GETLINECOUNT, 0, 0&amp:wink: - 1

ergibt immer -1, egal was ich für eine hwnd einsetze, die bestehende hwnd einer IE-Internetverbindung oder auch von Mozilla :frowning:

Wenn ich

For X = 0 To Max
List1.AddItem GetLine(Text1, X)
Next X

durch

 For X = 0 To 10000
 List1.AddItem GetLine(Text1, X)
 Next X

ersetze, füllt sich die Listbox, aber man sieht nix.
Jeder Eintrag ist 256 Bytes lang und leer, ggfs paar Steuerzeichen drin außer Null.

Aber, ich sehe gerade jetzt beim Schreiben, das „Child(x)“ in deinem Hilfstext habe ich irgendwie voll übersehen, muß doch noch mal testen gehen …

Gruß
Reinhard

Hallo Reinhard,

ich kam noch zu keinem Fortschritt.

ich auch nicht. :frowning:

Max = SendMessage(Text1.hwnd, EM_GETLINECOUNT, 0, 0&amp:wink: - 1

ergibt immer -1, egal was ich für eine hwnd einsetze, die
bestehende hwnd einer IE-Internetverbindung oder auch von
Mozilla :frowning:

`Text1.hwnd’ ist das Handle eines Images.

Bei der Einteilung in Parent und Child hat der Autor des Codes eventuell die Enkel vergessen?

Aus einem Notepad habe ich den Text lesen können, bei den Browsern komme ich nicht voran.

Gruß, Rainer