Forum | | | | Andreas Gaida | Hi! Weis vielleicht jemand wie man den Inhalt eines solchen Webcontrols auslesen kann. Müsste eine IP Adresse daraus auslesen. Mit der Maus kann man ja alles markieren und kopieren.Aber mir fehlen die passenden Messages um es automatisch zu machen.Wenn jemand die kennt ,währe ich für sie sehr dankbar. KompilierenMarkierenSeparieren MfG Andreas |
| | | Athlon X2 4800 , 2GB Ram , GeForce 7800GT Windows XP Pro , XProfan 10 und 11 , Profan2Cpp 1.6b | 18.01.2008 ▲ |
| |
| | Rolf Koch | Auf diese Art gehts garnicht. Schau mal hier: [web]https://xprofan.com/thread.core?t=3162&highlight=stringtoguid[/web] |
| | | | |
| | Andreas Gaida | Danke aber die Beispiele zeigen den Quellcode der Seite an. Ich brauche nur die Anzeige der ausgegebenen Texte und das ist manuell mit der maus machbar (Markieren und in die Zwischenablage kopieren)nur leider weis ich nicht wie das automatisch geht. |
| | | Athlon X2 4800 , 2GB Ram , GeForce 7800GT Windows XP Pro , XProfan 10 und 11 , Profan2Cpp 1.6b | 18.01.2008 ▲ |
| |
| | | Andreas nein aus pfui! Nimm die Download-Include - so oder so wirst Du aber den HTML parsen müssen um die von Dir gewünschten Inhalte herauszufischen! (nagut, xml parsen wirst net müssen um ne IP rauszufischen, hier werden vlt. substrs reichen)
Deine WAN-IP gibt Dir die download-inc auch per dw.ip() als String zurück - für den Fall das es Dir darum geht... |
| | | | |
| | Uwe ''Pascal'' Niemeier | Hallo Leute!
Hier eine Variante zur Anzeige des sichtbaren Textes einer Webseite: KompilierenMarkierenSeparieren $H Windows.ph
proc StringToGUID---------------Umwandlung String > globally unique identifier
parameters GUID$,GUID&
declare Temp$
Temp$=space$(80)
~MultiByteToWideChar(1,1,addr(GUID$),-1,addr(Temp$),80)
external(ole32,CLSIDFromString,addr(Temp$),GUID&)
endproc-----------------------------------------------------------------------
proc CallMethod--------------------------Methode eines COM-Interfaces aufrufen
parameters IFace&,Method&
declare VTable&
VTable&=long(IFace&,0)
Method&=long(VTable&,Method&*4)
case %pcount=2:return call( Method&,IFace& )
case %pcount=3:return call( Method&,IFace&,&(3) )
case %pcount=4:return call( Method&,IFace&,&(3),$(4) )
case %pcount=5:return call( Method&,IFace&,&(3),&(4),&(5) )
endproc-----------------------------------------------------------------------
proc TextAuslesen-------------------------------------sichtbaren Text Auslesen
parameters WebCtrl&
declare IID#
dim IID#,16
external(ole32,CoInitialize,0)
declare IUnknown&
external(atl,AtlAxGetControl,WebCtrl&,addr(IUnknown&))
declare IWebBrowser&
StringToGUID({D30C1661-CDAF-11d0-8A3E-00C04FC9E26E},IID#)--IID_IWebBrowser2
CallMethod(IUnknown&,0,IID#,addr(IWebBrowser&))-------IUnknown::QueryInterface
declare Status&
while 1
sleep 300
CallMethod(IWebBrowser&,31,addr(Status&))--IWebBrowser&::get_Busy
casenot Status&:break
endwhile
declare IHTMLDocument2&
CallMethod(IWebbrowser&,18,addr(IHTMLDocument2&))--IWebbrowser::get_Document
declare IHTMLElement&
CallMethod(IHTMLDocument2&,9,addr(IHTMLElement&))--IHTMLDocument2::get_body
declare Text&
CallMethod(IHTMLElement&,64,addr(Text&))--IHTMLElement::get_outerText
declare Size&,Text#,Text$
Size&=external(oleaut32,SysStringLen,Text&)
dim Text#,Size&
~WideCharToMultiByte(0,0,Text&,-1,Text#,Size&,0,0)
external(oleaut32,SysFreeString,Text&)
Text$=string$(Text#,0)
CallMethod(IHTMLElement&,2)----IHTMLElement::Release
CallMethod(IHTMLDocument2&,2)--IHTMLElement::Release
dispose Text#
dispose IID#
external(ole32,CoUninitialize)
return Text$
endproc-----------------------------------------------------------------------
window 0,0-800,600
usermessages 16
def AtlAxWinInit(0) !atl.dll,AtlAxWinInit
def AtlAxCreateControl(4) !atl.dll,AtlAxCreateControl
declare Atl&,Web&,a$
Atl&=usedll(atl.dll)
AtlAxWinInit()
a$=C:Test.html-----------Pfad oder URL
Web&=control(AtlAxWin,a$,$50300000,0,0,780,250,%hwnd,0,0,$200)-HTML-Contol anlegen
a$=TextAuslesen(Web&)
create(Multiedit,%hwnd,a$,0,290,780,250)----Text anzeigen
while 1
waitinput
case %umessage=16:break
endwhile
destroywindow(Web&)
freedll Atl&
Eleganter gehts bei Verwendung meiner ocx2-Routinen [...] : KompilierenMarkierenSeparierenwindowstyle 16+8+4+2+1
window 1,1-(%maxX-1),(%maxY-1)
$H Messages.ph
$H Windows.ph
$H ocx2.ph
$I ocx2.inc
def Redraw(1) ~RedrawWindow(&(1),0,0,$485)
usermessages 16----Beenden
ocxInit()
declare Pos#,Url$,WebControl&
dim Pos#,16
~GetClientRect(%hwnd,Pos#)
var WebObject&=ocxCreate(about:blank,%hwnd,0,0,long(Pos#,8),long(Pos#,12)/2,$53b00000,addr(WebControl&))
var Edit&=create(multiedit,%hwnd,,0,long(Pos#,12)/2,long(Pos#,8),long(Pos#,12)/2)
appendmenubar 101,Zurück
appendmenubar 102,Vorwärts
appendmenubar 103,Abbrechen
appendmenubar 104,Aktualisieren
appendmenubar 105,Startseite
appendmenubar 106,Suchen
appendmenubar 107,Datei öffnen
appendmenubar 108,URL öffnen
appendmenubar 109,Text anzeigen
appendmenubar 110,Quelltext anzeigen
ocxMethod(WebObject&,GoHome)--Startseite öffnen
--Bei Bedarf: Meldungen des WebBrowsers unterdrücken (z.B. Scriptfehler oder Offline)
ocxPut(WebObject&,Silent,$FFFF)
proc Navigation-------------------------------------------
parameters Mode$
var Document&=ocxGet(WebObject&,Document)
var Window&=ocxGet(Document&,parentWindow)
var History&=ocxGet(Window&,History)
ocxMethod(History&,Mode$)
ocxRelease(History&,Window&,Document&)
endproc---------------------------------------------------
proc TextAnzeigen-----------------------------------------
parameters Mode$
var Document&=ocxGet(WebObject&,Document)
var Body&=ocxGet(Document&,body)
var Text$=ocxGet(Body&,Mode$)
ocxRelease(Body&,Document&)
settext Edit&,Text$
endproc---------------------------------------------------
while 1
if menuitem(101)---------------------------------------Zurück
Navigation(back)
ocxMethod(WebObject&,goback) > Fehler bei Unterlauf
elseif menuitem(102)-----------------------------------Vorwärts
Navigation(forward)
ocxMethod(WebObject&,goforward) > Fehler bei Überlauf
elseif menuitem(103)-----------------------------------Abbrechen
ocxMethod(WebObject&,Stop)
elseif menuitem(104)-----------------------------------Aktualisieren
ocxMethod(WebObject&,Refresh)
elseif menuitem(105)-----------------------------------Startseite
ocxMethod(WebObject&,GoHome)
elseif menuitem(106)-----------------------------------Suchen
ocxMethod(WebObject&,GoSearch)
elseif menuitem(107)-----------------------------------Datei öffnen
Url$=loadfile$(Bitte Bild oder HTML-Datei wählen,*.*)
Redraw(WebControl&)--Neuzeichnen wg. Dialogbox bei Abbruch
case len(Url$):ocxMethod(WebObject&,Navigate,*+Url$)
elseif menuitem(108)-----------------------------------URL öffnen
Url$=input$(Bitte Web-Adresse eingeben:,URL:,http://www.Google.de)
Redraw(WebControl&)--Neuzeichnen wg. Dialogbox bei Abbruch
case len(Url$):ocxMethod(WebObject&,Navigate,*+Url$)
elseif menuitem(109)-----------------------------------Text anzeigen
TextAnzeigen(outerText)
elseif menuitem(110)-----------------------------------Quelltext anzeigen
TextAnzeigen(outerHTML)
endif------------------------------------------------------------
while 1-------------------------Warten, bis Aktion ausgeführt ist
casenot ocxGet(WebObject&,Busy):break
sleep 200
endwhile---------------------------------------------------------
~GetClientRect(%hwnd,Pos#)--Repositionieren wg. Scrolleisten bei Grössenänderung
setwindowpos WebControl&=0,0-long(Pos#,8),long(Pos#,12)/2
setwindowpos Edit&=0,long(Pos#,12)/2-long(Pos#,8),long(Pos#,12)/2
Redraw(WebControl&)--Neuzeichnen
waitinput
case %umessage=16:break--Ende
endwhile---------------------------------------------Ende Eingabeschleife
dispose Pos#
destroywindow(WebControl&)
ocxDeInit()
Im Zweifelsfall lassen sich so auch einzelne Elemente der Webseite abfragen, wenn sich diese irgendwie isolieren lassen, z.B. duch eine intene ID. Inwiefern das bei der FritzBox nutzbar ist, weiß ich aber (noch) nicht...
HTH Pascal |
| | | | |
| | RGH | Ein kleiner Tipp:
Das ~GetClientRect() kann man sich sparen. XProfan kennt seit langem die Funktionen Width(hWin&) / Height(hWin&), mit denen sich die Ausmaße des Clientbrereiches des Fensters hWin& ermitteln lassen. (Klar: Diese Funktionen rufen natürlich auch die API GetClientRect() auf ...)
Gruß Roland |
| | | Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4 | 19.01.2008 ▲ |
| |
| | Andreas Gaida | Danke Euch allen für die Hilfe. Aber die Lösungen sind mir zu Komplex. Mir würde wirklich ausreichen wenn ich den Text markieren könnte und ihm in die Zwieschenablage kopiert bekomme. Da dieses vorgehen auch manuell mit der Maus geht sollte es auch Kommandos geben die das automatisch bewerkstelligen. wie wm_Copy, wm_Paste was mir fehlt ist die Message für alles markieren.
M fG
Andreas |
| | | Athlon X2 4800 , 2GB Ram , GeForce 7800GT Windows XP Pro , XProfan 10 und 11 , Profan2Cpp 1.6b | 19.01.2008 ▲ |
| |
| | Uwe ''Pascal'' Niemeier | Hallo Leute!
@ Roland: Stimmt, das GetClientRect() muß mal bei irgendwelchen Versuchen übrig geblieben sein
@ Andreas:
Da dieses vorgehen auch manuell mit der Maus geht sollte es auch Kommandos geben die das automatisch bewerkstelligen. wie wm_Copy, wm_Paste
Eben nicht Sowas läßt sich im Webbrowser auch nur per COM realisieren, es sei denn, du würdest Maus/Cursor fernsteuern. Mit einfachen Messages ist da nichts zu machen.
HTH Pascal |
| | | | |
| | Frank Abbing | Du könntest es mit einer Kombination aus den API SetCursorPos() und mouse_event() probieren. Das simuliert Mausbewegungen- und knopfdrücke. |
| | | | |
| | RudiB. | Ich habe mal den oberen (ersten) Quellcode aufbereitet, bringt mir aber eine Fehlermeldung. Was läuft da schief ? Seitenaufruf=Google-Translate und Deutscher Begriff wird mit übergeben beim Aufruf.
"https://translate.google.com/?hl=de&sl=de&tl=it&text=hummel&op=translate"
Ich möchte auf der Seite lediglich die Übersetzung des Wortes auslesen.
$H Windows.ph
proc StringToGUID'---------------Umwandlung String > globally unique identifier
parameters GUID$,GUID&
declare Temp$
Temp$=space$(80)
~MultiByteToWideChar(1,1,addr(GUID$),-1,addr(Temp$),80)
external("ole32","CLSIDFromString",addr(Temp$),GUID&)
EndProc'-----------------------------------------------------------------------
proc CallMethod'--------------------------Methode eines COM-Interfaces aufrufen
parameters IFace&,Method&
declare VTable&
VTable&=long(IFace&,0)
Method&=long(VTable&,Method&*4)
case %pcount=2:return call( Method&,IFace& )
case %pcount=3:return call( Method&,IFace&,&(3) )
case %pcount=4:return call( Method&,IFace&,&(3),$(4) )
case %pcount=5:return call( Method&,IFace&,&(3),&(4),&(5) )
EndProc'-----------------------------------------------------------------------
proc TextAuslesen'-------------------------------------sichtbaren Text Auslesen
parameters WebCtrl&
declare IID#
dim IID#,16
external("ole32","CoInitialize",0)
declare IUnknown&
external("atl","AtlAxGetControl",WebCtrl&,addr(IUnknown&))
declare IWebBrowser&
StringToGUID("{D30C1661-CDAF-11d0-8A3E-00C04FC9E26E}",IID#)'--IID_IWebBrowser2
CallMethod(IUnknown&,0,IID#,addr(IWebBrowser&))'-------IUnknown::QueryInterface
declare Status&
while 1
sleep 300
CallMethod(IWebBrowser&,31,addr(Status&))'--IWebBrowser&::get_Busy
casenot Status&:break
endwhile
declare IHTMLDocument2&
CallMethod(IWebbrowser&,18,addr(IHTMLDocument2&))'--IWebbrowser::get_Document
declare IHTMLElement&
CallMethod(IHTMLDocument2&,9,addr(IHTMLElement&))'--IHTMLDocument2::get_body
declare Text&
CallMethod(IHTMLElement&,64,addr(Text&))'--IHTMLElement::get_outerText
declare Size&,Text#,Text$
Size&=external("oleaut32","SysStringLen",Text&)
dim Text#,Size&
~WideCharToMultiByte(0,0,Text&,-1,Text#,Size&,0,0)
external("oleaut32","SysFreeString",Text&)
Text$=string$(Text#,0)
CallMethod(IHTMLElement&,2)'----IHTMLElement::Release
CallMethod(IHTMLDocument2&,2)'--IHTMLElement::Release
dispose Text#
dispose IID#
external("ole32","CoUninitialize")
return Text$
EndProc'-----------------------------------------------------------------------
window 0,0-800,600
usermessages 16
def AtlAxWinInit(0) !"atl.dll","AtlAxWinInit"
def AtlAxCreateControl(4) !"atl.dll","AtlAxCreateControl"
declare Atl&,Web&,a$,ME&
Atl&=usedll("atl.dll")
AtlAxWinInit()
a$="https://translate.google.com/?hl=de&sl=de&tl=it&text=hummel&op=translate"'-----------Pfad oder URL
Web&=control("AtlAxWin",a$,$50300000,0,0,780,250,%hwnd,0,0,$200)'-HTML-Contol anlegen
a$=TextAuslesen(Web&)
ME&=create("Multiedit",%hwnd,a$,0,290,780,250)'----Text anzeigen
while 1
waitinput
case %umessage=16:break
endwhile
destroywindow(Web&)
freedll Atl&
|
| | | | |
| | RudiB. | ...noch als Nachtrag...die Webseite wird komplett angezeigt, dann kommt die Fehlermeldung... |
| | | | |
| | Georg Teles | Hi, in der proc CallMethod ist ein fehler:
dort steht ein $ statt & beim Parameter Nr 4
Korrigiert klappt es bei mir beim Erststart kommt die nervige Cookies Meldung
Grüße |
| | | | |
|
AntwortenThemenoptionen | 10.730 Betrachtungen |
ThemeninformationenDieses Thema hat 10 Teilnehmer: |