2011-02-26 2 views
0

J'ai un IE BHO créé il y a plus de 3 ans qui utilise la fonction IHTMLEventObj :: put_keyCode. Cette fonction a fonctionné comme documenté dans IE6, IE7 et IE8. Cependant, lors des tests avec IE9 RC, il ne fonctionne plus comme documenté. La fonction est appelée de la même manière et le résultat est S_OK, mais la clé n'apparaît pas dans le champ de saisie. L'appel est en cours dans le DISPID_HTMLELEMENTEVENTS2_ONKEYPRESS même de ma fonction Invoke().IHTMLEventObj :: put_keyCode échoue dans IE9 RC

J'ai trouvé quelqu'un avec un problème similaire: http://social.msdn.microsoft.com/Forums/is/ieextensiondevelopment/thread/abcbaffd-ed8a-45b8-840b-8ad8d7d10081, mais pour une raison quelconque, je ne suis pas en mesure de voir le problème. J'ai été en mesure de le voir en utilisant google cache: 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.

Toute aide serait grandement appréciée. C'est un problème critique qui doit être réglé dès que possible.

Merci d'avance.

MISE À JOUR: Voici un code, mais voulait au stress, que ce code fonctionne parfaitement dans IE6, IE7 et IE8. Dans IE9, il renvoie S_OK, mais la clé n'est pas modifiée.

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; 
     } 
    } 
} 

MISE À JOUR 2

Nous avons déposé un dossier MSDN, ils ont trouvé la question, et dernière, nous avons entendu parler d'eux allaient réparer.

+0

de quel type de champ de saisie s'agit-il? – Maurizio

+0

regular mateuscb

+0

Pourriez-vous poster un exemple de code pour votre événement OnKeyPress afin de montrer ce que vous faites là-bas? – Maurizio

Répondre