none
如何获取WebBrowser上的当前光标位置? RRS feed

  • 问题

  • 遇到问题:查找当前光标位置下的网页元素,当前光标位于一个ifame上,所以用WebBrowser.Document.OnMouseMove()方法是不可行的。

    WebBrowser控件本身不提供形如其他组件的MouseMove事件,有没有办法得到当前光标的坐标,并计算出其位置的iframe中的元素?

    已查阅论坛的相关帖子,没有找到类似问题的解决方法。

    求高手指导,给个思路也行。不胜感谢。


    • 已编辑 cylixhui 2011年10月17日 15:54
    2011年10月17日 15:52

答案

全部回复

  • 你可以用MSAA做一个hit test

    参考Inspect



    The following is signature, not part of post
    Please mark the post answered your question as the answer, and mark other helpful posts as helpful, so they will appear differently to other users who are visiting your thread for the same problem.
    Visual C++ MVP
    2011年10月17日 20:14
    版主
  • 老大,能在稍微展开一点吗?

    我查了一下说明,貌似这个功能有些相关,但它的描述是已知坐标找课件的控件,不知道对于WebBrowser里面的iframe能否适用?

    The IAccessible::accHitTest method retrieves the child element or child object that is displayed at a specific point on the screen. All visual objects support this method, but sound objects do not. Client applications rarely call this method directly; to get the accessible object that is displayed at a point, use theAccessibleObjectFromPoint function, which calls this method internally.

    如果适用的话,然后转换光标坐标为窗口的相对坐标,如果这个坐标在一个多层嵌套的iframe上,如何获取真正的元素呢??

     

    本人刚入门C#,或者,有没有例子如何直接调用WinAPI,来获取移动过程中光标的位置??谢谢



    • 已编辑 cylixhui 2011年10月18日 1:31
    2011年10月18日 1:26
  • IE的框架是没有窗口的,AccessibleObjectFromPoint返回的是顶层框架的文档。你可以用IHTMLDocument2::elementFromPoint来检查指定地方的元素是否是框架,如果是的话,转换坐标再调用框架文档的elementFromPoint

     



    The following is signature, not part of post
    Please mark the post answered your question as the answer, and mark other helpful posts as helpful, so they will appear differently to other users who are visiting your thread for the same problem.
    Visual C++ MVP
    2011年10月21日 18:24
    版主
  • 不好意思,我搜了你所有相关的帖,没有找到相关的类似的例子,如果有类似的例子就更好了,C#的。确认一个问题:这种办法肯定是可行的吧?老大?能不能在鼠标移动的过程中用呢,像IE的开封人员工具那样,在鼠标移动中可以找到鼠标下的元素?

    附带问题:我这几天在尝试通过继承来截获WebBrowser的鼠标事件,扩展WndProc方法,但都不成功,不是说windows的事件都是发到应用程序,由应用程序再派发到具体的应用窗口吗?如果知道,坐等指点,谢谢

     
    • 已编辑 cylixhui 2011年10月23日 15:15
    2011年10月23日 13:58
  • 你可以参考http://www.codeproject.com/KB/DLL/PasswordSPY.aspx

    IE的网页视图里面的元素都是自己画的,COM事件也是自己触发的,不会发通知消息到其他窗口。



    The following is signature, not part of post
    Please mark the post answered your question as the answer, and mark other helpful posts as helpful, so they will appear differently to other users who are visiting your thread for the same problem.
    Visual C++ MVP

    2011年10月24日 17:41
    版主