我要做一个类似qq眩采工具栏的东西,就是在IE中,当鼠标移动到图片上时,会弹出一个对话框,可以将图片保存等.
请教如何做.
我现在的思路是,用钩子Hook WindowsAPI BitBlt函数,当鼠标移动的时候,取鼠标下一个很小的矩形,然后使这个矩形无效,如果调用了BitBlt函数就代表鼠标小的是图片.
现在这个想法做了部分,但是还没有完全实现,如果高人有更好的方法,请指教,还有如果谁作过类似的东西,还忘赐教.
谢谢.

解决方案 »

  1.   

    可以枚举网页各个元素:
    参考:
    http://www.vckbase.com/document/viewdoc/?id=288

    http://www.vckbase.com/document/viewdoc/?id=1446
      

  2.   

    "maruchun(小马过河) ( ) 信誉:100  2006-01-18 12:40:00  得分: 0  
     
     
       应该是先判断鼠标的位置,当在某个位置时,弹出菜单,复制,保存等菜单进行所需操作"
      
     
    "当在某个位置时":什么位置,怎样知道IE中图片的在什么位置
    能详细说明吗?
      

  3.   

    IHTMLDocument2 :: elementFromPoint估计可以实现
      

  4.   

    先IHTMLDocument3::getElementsByTagName得到所有img,然后在每个img上面的用IHTMLDocument3::attachEvent捕获onmouseover和onmouseout事件,其实这段代码用脚本写方便一点
      

  5.   

    注意要点有两个:
    1、attachEvent的参数是一个IDispatch,你随便怎么乱实现都可以,之后触发事件的时候,DHTML会用你实现的Invoke 来调用,我记不清楚了 GetIDsOfNames、GetTypeInfo、GetTypeInfoCount这3个函数他是不会调用的,你可以放心,直接返回E_NOTIMPL就可以,当然IUnknown的实现不能省
      

  6.   

    2、如果要用脚本,可以用execScript,和安全无关的东西都可以放到脚本里面,你可以用execScript生成一个匿名函数(语法是function (){    } ),而C++传递参数进去。有任何自定义的,要调用的函数都放在匿名函数里面,如:"function ()\
    {\
    function A(b)\
    {\
    }\
    \
    for(int i=0; i < 5; i++)\
    {\
       A(i);\
    }\
    }"把这个字符串转换成BSTR作为你execScript的那个BSTR参数,你就可以得到这个函数的VARIANT类型的变量,你可以从里面得到IDispatch的值,然后用IDispatch::Invoke,把dispid设成0来调用就是调用它本身。
      

  7.   

    change the IHTMLElement::onmouseover property of image elements.
    See also
    http://msdn.microsoft.com/workshop/browser/mshtml/tutorials/sink.asp