Hallo freak,
freak hat geschrieben:Du kannst auch mittels COM die Daten direkt aus den Feldern lesen, das ist dann unabhängig von JavaScript.
cool, stimmt ja. Das würde in der Tat schon etwas schicker sein.
ich habe mich also mal hingesetzt und ein wenig ausprobiert.
Allerdings bleibe ich bei einer Sache hängen:
Ausgehend von diesem HTML
Code: Alles auswählen
<html>
<body>
<form id="formular">
<input type="text" value="123" id="MeinTextFeld" />
<div id="hallo">holla</div>
</form>
</body>
</html>
habe ich Deinen Code als Grundlage genommen
Code: Alles auswählen
#Window=0
#WebGadget=0
If OpenWindow(#Window, #PB_Ignore, #PB_Ignore, 300, 300, "")
If CreateGadgetList(WindowID(#Window))
WebGadget(#WebGadget, 0, 0, 300, 300, "C:\test.html")
; get webgadgets IWebBrowser2 interface:
Browser.IWebBrowser2 = GetWindowLong_(GadgetID(#WebGadget), #GWL_USERDATA)
; wait for page to be loaded..
Repeat
While WindowEvent(): Delay(1): Wend
Until GetGadgetAttribute(#WebGadget, #PB_Web_Busy) = 0
; get the document interface
If Browser\get_Document(@DocumentDispatch.IDispatch) = #S_OK
; query for IHTMLDocument3:
If DocumentDispatch\QueryInterface(?IID_IHTMLDocument3, @Document.IHTMLDocument3) = #S_OK
; here you have a IHTMLDocument3 pointer, and can work with it...
; das funktioniert nicht. bstr ist 0
If Document\getElementById("MeinTextFeld", @HTMLInputElement.IHTMLInputElement) = #S_OK
If HTMLInputElement
If HTMLInputElement\get_Value(@bstr) = #S_OK
If bstr
Value.s = PeekS(bstr, -1, #PB_Unicode)
Debug ">>" + Value + "<<"
SysFreeString_(bstr)
Else
Debug "bstr = 0"
EndIf
Else
Debug "Element\get_Value(@bstr) != #S_OK "
EndIf
HTMLInputElement\Release()
Else
Debug "!Element"
EndIf
Else
Debug "?"
EndIf
; das funktioniert (aber leider nur mit einem DIV):
If Document\getElementById("hallo", @HTMLElement.IHTMLElement) = #S_OK
If HTMLElement
If HTMLElement\get_innerhtml(@bstr) = #S_OK
If bstr
Value.s = PeekS(bstr, -1, #PB_Unicode)
Debug ">>" + Value + "<<"
SysFreeString_(bstr)
Else
Debug "bstr = 0"
EndIf
Else
Debug "Element\get_Value(@bstr) != #S_OK "
EndIf
HTMLElement\Release()
Else
Debug "!HTMLElement"
EndIf
Else
Debug "?"
EndIf
Document\Release()
EndIf
DocumentDispatch\Release()
EndIf
Repeat
Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
EndIf
End
DataSection
IID_IHTMLDocument3: ; {3050f485-98b5-11cf-bb82-00aa00bdce0b}
Data.l $3050F485
Data.w $98B5, $11CF
Data.b $BB, $82, $00, $AA, $00, $BD, $CE, $0B
EndDataSection
Das Problem: Das DIV bekomme ich mit IHTMLElement und
get_innerhtml() problemlos ausgelesen. Das Textfeld (IHTMLInputElement
und get_Value())allerdings kann ich nicht auslesen.
Vielleicht wirft Du mal Dein geschultes Auge auf den Code und kannst
erkennen, woran es liegt?
Danke im voraus & Grüße ... Kiffi