Bien qu'il ne soit pas officiellement pris en charge, vous pouvez toujours obtenir une référence à l'original IDocHostUIHandler
afin de passer des appels à travers toutes les méthodes que vous ne prévoyez pas de remplacer dans votre BHO.
Vous devez d'abord convertir le document en IOleObject
, puis appeler le GetClientSite
pour obtenir l'objet original IOleClientSite
. Cela peut ensuite être converti en IDocHostUIHandler
ou en IOleCommandTarget
afin d'appeler les méthodes à partir de ces interfaces sur le gestionnaire/cible d'origine.
Voici un extrait de code exemple de l'événement DocumentComplete d'un C# BHO (Explorer
est une instance de ShDocVw.WebBrowserClass
, UIHandler
est ma propre classe IDocHostUIHandler
qui passe appels vers l'objet passé dans le initialiseur, et toutes les interfaces étaient pris directement à partir http://pinvoke.net):
IOleObject obj = Explorer.Document as IOleObject;
if (obj != null)
{
IOleClientSite cs = null;
obj.GetClientSite(ref cs);
if (cs != null)
{
ICustomDoc cDoc = Explorer.Document as ICustomDoc;
if (cDoc != null)
{
cDoc.SetUIHandler(new UIHandler(cs));
}
}
}
Cela a été adapté à partir du code C++ disponible dans le projet PopupBlocker ici http://www.codeproject.com/Articles/4003/Popup-Window-Blocker
comment vous avez résolu problème 2? – walter