在.NET中能够很容易实现private void Document_Click(Object sender, HtmlElementEventArgs e)
{
if (wB.Document != null)
{
HtmlElement elem = wB.Document.GetElementFromPoint(e.MousePosition);
textBox1.Text = elem.InnerHtml;
}
}但是,进过一下午努力,在VB6.0中始终找不到办法~~再把问题说一遍:
鼠标点击网页时,返回
鼠标点击的网页元素 解决方案 ?
VB6更简单Dim WithEvents m_Doc As MSHTML.HTMLDocumentPrivate Sub Form_Load()
Me.WebBrowser1.Navigate2 "http://www.baidu.com"
End SubPrivate 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 FunctionPrivate 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
别忘了引用“Microsoft HTML Object Library”
敢问一下m_Doc是个普通的按钮吗?谢了
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得到。
我要看看怎么获取frame里面的元素