我有一個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案例,他們已經發現了問題,最後我們聽到他們要去解決它。
它是什麼類型的輸入字段? – Maurizio 2011-02-26 23:10:40
regular – mateuscb 2011-02-27 03:23:48
您能否爲您的OnKeyPress事件發佈一些示例代碼以顯示您在那裏做什麼? – Maurizio 2011-02-27 04:19:23