A: 

If you're just looking for keystrokes, can't you subclass the control?

Valentin Galea
I don't think the OP wants keystrokes; I think they want webbrowser events and just want keystrokes to work without dropping characters.
jeffamaphone
That's correct, I'm not really interested in the keystrokes. But when typing fast some get dropped which is annoying as a user. I'm fairly certain it's because of the way I sink the events, because not sinking them fixes the problem.
Brian
A: 

Underneath the covers all the various connection methods (AtlAdvise, AfxConnectionAdvise, etc) all use IConnectionPointContainer and IConnectionPoint—they're just saving you typing boilerplate COM goo.

I suspect this has to do with how you're connecting to the running instance of IE. How are you getting the IWebBrowser2 pointer? Are you being loaded into the IE process or are you a separate process? If you're running on a different thread than the IWebBrowser2's original thread (the IE Tab UI thread), are you doing proper COM marshalling?

jeffamaphone
I'm running in a separate thread. I use SHDocVw::IShellWindowsPtr to access the running instance of IE. To get the browser pointer I load it using:_variant_t va(index_to_window, VT_I4);spDisp = m_spSHWinds->Item(va);SHDocVw::IWebBrowser2Ptr spBrowser(spDisp);spBrowser->AddRef();And save spBrowser for later processing, the m_pWebBrowser2 in the example above.I spin a thread off to help with processing at some point and use marshalling there, but not in the main program thread. It seems weird that it would work fine as long as I don't trap events? I'll look into that though.Thanks.
Brian