请教一个问题, 请问怎么捕获IE输入筐的事件 OnKeyDown 不是 OnKeyPress和 DIID_DWebBrowserEvents2 建立连接点, 只能捕获 OnKeyPress 事件,感觉到了Input 元素里面 , 事件就捕获不了了. 用 AttachEvent , VARIANT_BOOL 返回 TRUE , 返回值也是 S_OK, 
但第2个参数 IDispath*, 我传的一个实现了 IDispath的 接口, 网上资料说需要建
一个不代参数的方法, 并 ID 设成 0, 但还是没有进入这个函数请问能用这种方法吗? 另外 用Accessibility方式能实现吗,这个还没测试, 如果AttachEvent 方式最好,
请指教, 一些关键字都可以, 谢谢

解决方案 »

  1.   

    同DIID_HTMLDocumentEvents2建立连接点就可以捕获KeyDown事件了
      

  2.   

    如果比较详细的话下载MyIE代码或者别的浏览器代码看看很不错的,下面的是MyIE2.4的代码,别的版本或者别的IE浏览器你搜一下吧
    http://down.soit.com.cn/internet/browser/browser/1094.html
      

  3.   

    我已经和 DIID_HTMLDocumentEvents2 建立了连接 ,只能捕获 KeyPress 事件我还获得具体 元素, 取得 IUnknown , AtlAdvise(pUnk, GetUnknown(), DIID_HTMLInputTextElementEvents, &m_dwInputCookie);但还是捕获不了 DISPID_HTMLELEMENTEVENTS_ONKEYDOWN
    可以多捕获 DISPID_HTMLINPUTTEXTELEMENTEVENTS_ONCHANGE 事件:(
      

  4.   

    捕获DISPID_HTMLELEMENTEVENTS2_ONKEYDOWN试一试
      

  5.   

    一样感觉 是 因为 Document Element InputElement 都有 
    DISPID_HTMLELEMENTEVENTS_ONKEYDOWN 事件, 因为不能辨认, 所以忽略了我只和Element 建立连接, 可以收到 OnClick 事件, 就是不能收到 OnKeyDown事件, 
    没发解决, 郁闷IProvideClassInfo2 * pProvideClassInfo2 = NULL;
    hResult = pElement2->QueryInterface(__uuidof(IProvideClassInfo2), (void**)&pProvideClassInfo2);
    if (S_OK == hResult)
    {
    GUID guid;
    pProvideClassInfo2->GetGUID(GUIDKIND_DEFAULT_SOURCE_DISP_IID,&guid);
    IUnknown* pUnk = static_cast<IUnknown*>(pElement2);
    AtlAdvise(pUnk, GetUnknown(), guid, &m_dwInputCookie);
      

  6.   

    问题初步解决,通过跟踪 dispidMember
    每次OnKeyDown 的时候,都一个  0x80010000 + 13 的 ID对照查询 
    #define DISPID_XOBJ_MIN                 0x80010000
    #define DISPID_XOBJ_MAX                 0x8001FFFF
    #define DISPID_XOBJ_BASE                DISPID_XOBJ_MIN不知道到时是什么事件, 
    请大侠说说原因
      

  7.   

    Fires on a databound object when an error occurs while updating the associated data in the data source object. SyntaxVARIANT_BOOL onerrorupdate(      VOID);DISPID_HTMLELEMENTEVENTS_ONERRORUPDATE 0x80010000 + 13
    why????????????????????????????????????????????????