2011-02-26 57 views
0

我有一個3年前創建的使用IHTMLEventObj :: put_keyCode函數的IE BHO。該功能的工作原理與IE6,IE7和IE8相同。但是,當使用IE9 RC進行測試時,它不再像記錄那樣工作。該函數的調用方式相同,結果爲S_OK,但該鍵在輸入字段中不顯示。該調用正在DISPID_HTMLELEMENTEVENTS2_ONKEYPRESS中進行,即使是我的Invoke()函數。IHTMLEventObj :: put_keyCode在IE9中失敗RC

我發現有人有類似的問題:http://social.msdn.microsoft.com/Forums/is/ieextensiondevelopment/thread/abcbaffd-ed8a-45b8-840b-8ad8d7d10081,但由於某種原因,我無法查看問題。我能夠使用谷歌緩存查看它:http://webcache.googleusercontent.com/search?q=cache:3OkEceoi6jwJ:social.msdn.microsoft.com/Forums/is/ieextensiondevelopment/thread/abcbaffd-ed8a-45b8-840b-8ad8d7d10081+put_keyCode+IE9&cd=1&hl=pt-BR&ct=clnk&gl=br&source=www.google.com.br

任何幫助將不勝感激這是一個關鍵問題,需要儘快解決。

在此先感謝。

UPDATE: 下面是一些代碼,但想強調,這個代碼完全在IE6,IE7和IE8。在IE9中,它返回S_OK,但密鑰不會更改。

BOOL CToolBandObj::InvokeElementOnKeyPress ( DISPID dispidMember, REFIID riid, LCID lcid, WORD wFlags, 
              DISPPARAMS* pDispParams, VARIANT* pvarResult, 
              EXCEPINFO* pExcepInfo, UINT* puArgErr) 
{ 

    CComPtr<IDispatch> spEventObj; 
    spEventObj = pDispParams->rgvarg[0].pdispVal; 
    CComPtr<IHTMLEventObj> pHtmlEvent; 
    HRESULT hr = spEventObj->QueryInterface(IID_IHTMLEventObj,(LPVOID*)&pHtmlEvent); 

    if (SUCCEEDED(hr) && pHtmlEvent) 
    { 
     CComPtr<IHTMLElement>spElement; 
     hr = pHtmlEvent->get_srcElement(&spElement); 

     _bstr_t bstrTag; 
     spElement->get_tagName(&bstrTag.GetBSTR()); 

     if (SUCCEEDED(hr) && spElement) 
     { 
      LONG lKeyCode = 0; 
      pHtmlEvent->get_keyCode(&lKeyCode); 


      pHtmlEvent->put_keyCode(lKeyCode); 
      pvarResult->vt = VT_BOOL; 
      pvarResult->boolVal = VARIANT_TRUE; 
      return TRUE; 
     } 
    } 
} 

更新2

我們已經提交了MSDN案例,他們已經發現了問題,最後我們聽到他們要去解決它。

+0

它是什麼類型的輸入字段? – Maurizio 2011-02-26 23:10:40

+0

regular mateuscb 2011-02-27 03:23:48

+0

您能否爲您的OnKeyPress事件發佈一些示例代碼以顯示您在那裏做什麼? – Maurizio 2011-02-27 04:19:23

回答