VB6 获得WebBrowser加载网页中,点击的元素

VB6 获得WebBrowser加载网页中,点击的元素

引用“Microsoft HTML Object Library”
Dim WithEvents m_Doc As MSHTML.HTMLDocument
Private Sub Form_Load()
    Me.WebBrowser1.Navigate2 "http://www.baidu.com"
End Sub
Private Function m_Doc_onclick() As Boolean
    Dim elem As IHTMLElement
    Set elem = m_Doc.parentWindow.event.srcElement
    Debug.Print "m_Doc_onclick", "当前触发事件的元素:", elem.tagName, elem.sourceIndex, elem.Id
    m_Doc_onclick = True
End Function
Private Sub WebBrowser1_BeforeNavigate2(ByVal pDisp As Object, URL As Variant, Flags As Variant, TargetFrameName As Variant, PostData As Variant, Headers As Variant, Cancel As Boolean)
    Set m_Doc = Me.WebBrowser1.Document
End Sub

    Document对象也有ElementFromPoint的。
    可以用getCursorPos获得鼠标位置。再用ScreentoClient将鼠标位置转换成Webbrowser内的位置,而且在这一步你要想办法得到Webbrowser的句柄,会有点麻烦。
    然后再用ElementFromPoint就能获得鼠标处的元素。
    也可以直接用Document的ActiveElement方法得到当前活动元素。

    但是还有一点,当元素在Frame/Iframe中时,你不能简单地用这个方式得到。要特殊处理。
直接用Document的ActiveElement方法得到当前活动元素不是很可靠,在获取表格元素时是没有问题的,其它的元素就不行了。我试过了~
    Document对象也有ElementFromPoint,但是在VB里不能直接用。
    Document的ActiveElement方法WS的表述中: 当文档具有焦点,而文档中的元素没有获得焦点时,ActiveElement 将返回对应于 <BODY> 标记的元素。 如果文档没有焦点,ActiveElement 将返回 nullNothingnullptrnull 引用(在 Visual Basic 中为 Nothing)。 如果具有输入焦点的当前元素是 HTML TABLE 标记中的一个单元格 (TD),ActiveElement 将返回包含 TABLE 元素的元素。
    ActiveElement绝对不止对Table元素有效。你注意一下元素是不是在框架里,如果是在框架(Frame)里,如果是在框架里边那就不能直接用ActiveElement得到。  

posted @ 2016-06-27 00:14  whchensir  阅读(846)  评论(0)    收藏  举报