Hallo Wolfgang,
danke erstmal für die Hilfe. Entschuldige die knappe Ausführung ich hoffe
diese wird im Gegenzug nicht zu lang. :)
Post by Patrick WohlannBisher habe ich einfach die URL mit
ReadText(window_hwnd)
ausgelesen (das FensterHandle hab ich)
Post by Wolfgang BaduraKannst Du erläutern was Du in ReadText(window_hwnd)
tust?
Also die Grundsätzliche Idee ist folgende: Ein User soll die Möglichkeit
haben per Click Produktbeschreibungen aus einer Webseite, welche er im
InternetExplorer betrachtet, in ein Formular zu übernehmen. Dazu wird bisher
die URL aus dem IE ausgelesen und mit dem internen webbrowserobjekt
geöffnet.
Aus dem webbrowserobjekt wird dann der Quelltext ausgelesen und die
Produktbeschreibung übernommen.
Das ganze sieht jetzt etwa so aus(etwas gekürzt):
Private Sub Befehl27_Click() 'Button wurde gedrueckt
On Error GoTo Err_Befehl27_Click
...
sViewedURL = GetURLList()
WebBrowser1.Navigate (sViewedURL)
Produktbeschreibung = WebBrowser1.Document.body.innerhtml
...
End Sub
-------------------
Public Function GetURLList() As String
..
EnumWindows AddressOf EnumerateProc, 0
If Len(sURLList) > 0 Then
sURLList = Mid(sURLList, 2)
End If
GetURLList = sURLList
sURLList = ""
End Function
-----------------
Private Function EnumerateProc( _ 'Suche den Internet Explorer
ByVal app_hwnd As Long, _
ByVal lParam As Long) As Boolean
...
' Fenstertitel auslesen.
length = GetWindowText(app_hwnd, buf, Len(buf))
Title = Left$(buf, length)
' zusätzlich Name der Fensterklasse bestimmen
' ist es ein Internet Explorer Fenster, so lautet der Klassenname
"IEFrame"
length = 256
buf = Space$(length - 1)
length = GetClassName(app_hwnd, buf, length)
buf = Left$(buf, length)
If InStr(1, Title, "Opera", 1) Or _
InStr(1, Title, "Netscape", 1) Or _
Trim(buf) = "IEFrame" Or InStr(1, Title, "SlimBrowser") Then
sURLList = sURLList & "," & getURL(app_hwnd)
End If
' Weitersuchen...
EnumerateProc = 1
End Function
-------------------------
Private Function getURL(window_hwnd As Long) As String
Dim txt As String
Dim buf As String
Dim buflen As Long
Dim child_hwnd As Long
Dim children() As Long
Dim num_children As Integer
Dim i As Integer
Dim sURL As String
' Klassennamen ermitteln --> wir wollen "Edit"
buflen = 256
buf = Space$(buflen - 1)
buflen = GetClassName(window_hwnd, buf, buflen)
buf = Left$(buf, buflen)
' Edit-Klasse gefunden ?
If buf = "Edit" Then
' ja, d.h. wir brauchen nur noch den
' Text auslesen
sURL = ReadText(window_hwnd)
If IsGoodURL(sURL) Then
getURL = sURL
Exit Function
End If
End If
' kein Edit-Objekt oder ungültige URL :(
' wir müssen die (weiteren) Childs
' durchsuchen (rekursiv)
num_children = 0
child_hwnd = GetWindow(window_hwnd, GW_CHILD)
Do While child_hwnd <> 0
num_children = num_children + 1
ReDim Preserve children(1 To num_children)
children(num_children) = child_hwnd
child_hwnd = GetWindow(child_hwnd, GW_HWNDNEXT)
Loop
' wir untersuchen wiederrum die Child's,
' ob sie vom Typ Edit sind
For i = 1 To num_children
txt = getURL(children(i))
If txt <> "" Then Exit For
Next i
getURL = txt
End Function
-----------------------------------
Private Function ReadText(window_hwnd As Long) As String
Dim txtlen As Long
Dim txt As String
ReadText = ""
If window_hwnd = 0 Then Exit Function
txtlen = SendMessage(window_hwnd, WM_GETTEXTLENGTH, 0, 0)
If txtlen = 0 Then Exit Function
txtlen = txtlen + 1
txt = Space$(txtlen)
txtlen = SendMessage(window_hwnd, WM_GETTEXT, txtlen, ByVal txt)
ReadText = Left$(txt, txtlen)
End Function
Soweit, sogut. Nun gibt es Webswebseiten wo diese Methode nicht
funktioniert, da
man beim öffenen der URL im webbrowser auf die Startseite redirected wird
und das
Programm nicht weiß, welches Produkt der User grad betrachtet hat (z.B.
anhand der Artikelnummer):(
Deshalb würd ich gern den Quelltext der betrachteten Seite direkt auslesen,
so wie ich ja auch die URL auslese.
Post by Patrick Wohlannhttp://msdn.microsoft.com/en-us/library/ms760305.aspx
Es handelt sich bei "Microsoft.XMLHTTP" um ein Objekt, das auf die
Schnelle aus dem Internet etwas lesen kann.
Das geht natürlich nur dann, wenn Du die URL kennst!
Dafür bedarf es nicht einmal irgendeines Verweises.
Ein Beispiel für dieses Objekt findest Du unter
http://www.access-im-unternehmen.de/605.0.html.
Ein weiterer Hit ist dabei das Objekt
"htmlfile", welches in der Lage ist den HTML-Text der Antwort nach vielen
Kriterien zu parsen.
Doch das, glaube ich, kennst Du ja schon
Post by Wolfgang BaduraWebBrowser1.Document.body.innerhtml
Das ist zwar schon hilfreich stellt mich aber vor dasselbe Problem, da ich
auch hier nur die html der Startseite bekomme.
Noch andere Ideen?
Patrick