挂接Outlook联系人的发送/接收同步事件

挂接Outlook联系人的发送/接收同步事件,outlook,vsto,ms-office,Outlook,Vsto,Ms Office,如何使用VSTO加载项为Outlook 2007中联系人文件夹/联系人项目的send和receive事件附加事件处理程序?我尝试使用: Application.ActiveExplorer().SyncObjects.ForEach { SyncObject.SyncEnd += \\Do something } 但它不起作用。实际上,我的需求有点不同,但可能是相同的: 我希望在发送/接收后收到文件夹更改的通知(在我的情况下是约会)。 我的第一个想法(我想你也在同一条轨道上)是检查发送/

如何使用VSTO加载项为Outlook 2007中联系人文件夹/联系人项目的
send和receive
事件附加事件处理程序?我尝试使用:

Application.ActiveExplorer().SyncObjects.ForEach
{
   SyncObject.SyncEnd += \\Do something
}

但它不起作用。

实际上,我的需求有点不同,但可能是相同的: 我希望在发送/接收后收到文件夹更改的通知(在我的情况下是约会)。 我的第一个想法(我想你也在同一条轨道上)是检查发送/接收事件,也许从中获得一些项目集合或类似的东西,但没有这样的东西可用。(如中所述)

我的第二条路径来自:我可以注册到文件夹的
Item\u Add
Item\u Change
(甚至
Item\u Removed
)事件(发送-接收所做的更改也会触发这些事件):

一些代码:

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

您可以连接邮件发送/接收事件,然后检查邮件类型是否为ContactItem。下面是Send事件的一个示例

// hook up the event
this.Application.ItemSend += ThisApplication_SentMail;
然后在事件处理程序中检查邮件项目类型

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

 }
我试过了

Application.ActiveExplorer().SyncObjects.AppFolders.SyncEnd += \\EventHandler
这将钩住所有默认文件夹的发送/接收