Udostępnione dodatki dla programu Outlook 2007 Przechwytywanie zdarzenia ReplyToAll
Używam VS 2010 i Dot Net Framework 2.0. Stworzyłem projekt w Extensibility-> Shared Add-ins for Outlook. Próbuję uchwycić Event ReplyToAll, który nie został zwolniony. Sprawdź poniższy kod:
Metoda OnConnection
inspectors = applicationObject.Inspectors;
inspectors.NewInspector += new Outlook.InspectorsEvents_NewInspectorEventHandler(inspectors_NewInspector);
void inspectors_NewInspector(Microsoft.Office.Interop.Outlook.Inspector Inspector)
{
mailItem = null;
try
{
Outlook.NameSpace ns = Inspector.Session;
Outlook.MAPIFolder inbox = ns.GetDefaultFolder(
Outlook.OlDefaultFolders.olFolderInbox);
foreach (object o in inbox.Items)
{
mailItem = o as Outlook.MailItem;
if (mailItem != null)
{
break;
}
}
if (mailItem == null)
{
MessageBox.Show("Couldn't find a mail item.");
}
else
{
((Outlook.ItemEvents_10_Event)mailItem).ReplyAll += new
Outlook.ItemEvents_10_ReplyAllEventHandler(Connect_ReplyAll);
}
}
catch (Exception ex)
{
MessageBox.Show("asdgh"+ex.StackTrace);
}
}
void Connect_ReplyAll(object Response, ref bool Cancel)
{
MessageBox.Show(Response+"Hello You have Clikced ReplyTOAll");
}
Ale wywołano metodę Connect_ReplyAll What is Wrong?
Nowy kod, który działa, ale zdarzenie jest zarejestrowane
public void OnConnection(object application, Extensibility.ext_ConnectMode connectMode, object addInInst, ref System.Array custom)
{
try
{
applicationObject = (Outlook.Application)application;
if (connectMode != Extensibility.ext_ConnectMode.ext_cm_Startup)
{
OnStartupComplete(ref custom);
}
addInInstance = addInInst;
inspectors = applicationObject.Inspectors;
explorer = applicationObject.Explorers.Application.ActiveExplorer();
explorer.SelectionChange += new Outlook.ExplorerEvents_10_SelectionChangeEventHandler(explorer_SelectionChange);
inspectors.NewInspector += new
Outlook.InspectorsEvents_NewInspectorEventHandler(inspectors_NewInspector);
}
catch(Exception ex)
{
MessageBox.Show(""+ex.StackTrace);
}
//((Microsoft.Office.Interop.Outlook.ItemEvents_10_Event)mailItem).Reply += new Microsoft.Office.Interop.Outlook.ItemEvents_10_ReplyEventHandler(ReplyToAllEvent);
}
void explorer_SelectionChange()
{
try
{
Outlook.MailItem mailExplorer=null;
mailTO = "";
mailCC = "";
mailBCC = "";
foreach (object selectedItem in explorer.Selection)
{
mailExplorer = selectedItem as Outlook.MailItem;
//MessageBox.Show("" + mailItem.EntryID.ToString());
break;
}
if (mailExplorer != null)
{
if (selectedItems.Contains(mailExplorer.EntryID.ToString()))
{
selectedItems.Remove(mailExplorer.EntryID);
((Outlook.ItemEvents_10_Event)mailExplorer).ReplyAll -= new Outlook.ItemEvents_10_ReplyAllEventHandler(Connect_ReplyAll);
((Outlook.ItemEvents_10_Event)mailExplorer).Reply -= new Outlook.ItemEvents_10_ReplyEventHandler(Connect_Reply);
}
((Outlook.ItemEvents_10_Event)mailExplorer).ReplyAll +=
new Outlook.ItemEvents_10_ReplyAllEventHandler(Connect_ReplyAll);
((Outlook.ItemEvents_10_Event)mailExplorer).Reply +=
new Outlook.ItemEvents_10_ReplyEventHandler(Connect_Reply);
selectedItems.Add(mailExplorer.EntryID);
mailTO = mailExplorer.To;
mailCC = mailExplorer.CC;
mailBCC = mailExplorer.BCC;
}
}
catch(Exception ex)
{
MessageBox.Show(""+ex.StackTrace);
}
}
„Gdy zarejestruję mailitem z ReplyAll Event Jeśli ten sam adres e-mail zostanie wybrany, to zdarzenie zostanie wywołane wielokrotnie”. ten problem został rozwiązany za pomocą powyższego kodu, ale pojawia się nowy błąd podczas odłączania zdarzenia. Pomóż mi
Dostaję ten błąd