2009-06-18 96 views
1

如何使用VSTO AddIn爲Outlook 2003中的聯繫人文件夾/聯繫人項目的SendAndReceive事件附加事件處理程序?我試過使用:掛接到Outlook聯繫人的發送/接收同步事件

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

但它不工作。

回答

2

我試圖

Application.ActiveExplorer().SyncObjects.AppFolders.SyncEnd += \\EventHandler 

此掛鉤發送/接收所有默認文件夾..

0

其實我的需求有點不同,但可能是一樣的: 我希望在發送/接收之後得到一個文件夾(在我的情況下爲約會)變化的通知。 我的第一個想法(我認爲你在同一軌道上)是檢查發送/接收事件,並可能從中收集某些項目或類似的東西,但沒有這樣的事情可用。 (如也在this forum post解釋)

我的第二個路徑來自於following article:我可以對文件夾的Item_AddItem_Change(甚至Item_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); 
    } 
} 
0

您可以連接郵件發送/接收事件,然後檢查郵件類型是ContactItem。以下是發送事件的示例。

// 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 

}