Hooking per inviare / ricevere l'evento di sincronizzazione dei contatti di Outlook
Domanda
Come posso allegare un gestore di eventi per SendAndReceive
evento di cartelle di contatto / elementi di contatto in Outlook 2007 utilizzando VSTO AddIn? Ho provato a usare:
Application.ActiveExplorer().SyncObjects.ForEach
{
SyncObject.SyncEnd += \\Do something
}
Ma non funziona.
Soluzione
Ho provato
Application.ActiveExplorer().SyncObjects.AppFolders.SyncEnd += \\EventHandler
Si collega per inviare / ricevere tutte le cartelle predefinite ..
Altri suggerimenti
In realtà il mio bisogno era un po 'diverso ma potrebbe essere lo stesso: Volevo essere informato delle modifiche di una cartella (appuntamenti nel mio caso) dopo un invio / ricezione. Il mio primo pensiero (e penso che tu sia sulla stessa traccia) è stato quello di verificare la presenza di un evento di invio / ricezione e magari ricavarne qualche raccolta o qualcosa di simile, ma nulla di simile è disponibile. (come spiegato anche in questo post sul forum )
Il mio secondo percorso è venuto dal seguente articolo : posso registrarmi all'evento Item_Add
e Item_Change
(e persino Item_Removed
) di una cartella (che sono anche attivati ??dalle modifiche fatto da una ricezione di invio):
Alcuni codici:
// Get the folder calendar folder and subscribe to the events.
private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
Application.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderCalendar).Items.ItemAdd += new Microsoft.Office.Interop.Outlook.ItemsEvents_ItemAddEventHandler(Items_ItemAdd);
Application.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderCalendar).Items.ItemChange += new Microsoft.Office.Interop.Outlook.ItemsEvents_ItemChangeEventHandler(Items_ItemChange);
}
// Do something with it.
void Items_ItemAdd(object Item)
{
logItem(Item, "Add");
}
void logItem(object Item, string Action)
{
Outlook.AppointmentItem item = Item as Outlook.AppointmentItem;
File.AppendAllText(@"e:\log.txt", string.Format("Item {0}: {1}", Action, Item));
if (item != null)
{
File.AppendAllText(@"e:\log.txt", " - Appointment: " + item.Subject);
}
}
È possibile collegare l'evento di invio / ricezione della posta e quindi verificare che il tipo di posta sia un ContactItem. Ecco un esempio dell'evento Invia.
// hook up the event
this.Application.ItemSend += ThisApplication_SentMail;
quindi nel gestore dell'evento controlli il tipo di elemento di posta;
internal void ThisApplication_SentMail(object item, ref bool cancel)
{
Outlook.ContactItem contactItem = item as Outlook.ContactItem;
// mail message is not a ContactItem, so exit.
if (contactItem == null) return;
// do whatever you need to here
}