MS Outlook 提供 MAPI 来访问 Outlook 日历项目。通过日历项目,它可以找到 Outlook 的所有定期和非定期约会。在定期约会的情况下,可以使用 AppointmentItem 的 RecurrencePattern 的 GetOccurence 函数找到所有重复约会的出现。GetOccurence 函数将获取日期和时间以返回该日期的事件。如果存在,它将返回,否则将给出异常。
如果定期约会的所有出现都具有相同的 StartTime 和 EndTime,则向 GetOccurence 提供开始时间输入,工作得很好。但是,如果修改了某个特定事件的 StartTime 和 EndTime,则 GetOccurence 将不会返回该事件。另一种方法是每天每隔 30 分钟检查一次。但这种方法似乎效率不高。
有人有更好的主意吗?
_ApplicationPtr olApp("Outlook.Application");
_NameSpacePtr olMAPI;
olMAPI = olApp->GetNamespace("MAPI");
hr = olMAPI->Logon("","",false,false);
MAPIFolderPtr olCalendarFolder = olMAPI->GetDefaultFolder(olFolderCalendar);
_ItemsPtr olCalendarItems = olCalendarFolder->GetItems();
_AppointmentItemPtr olAppt = (_AppointmentItemPtr) olCalendarItems->GetFirst();
RecurrencePatternPtr recurPattern = olAppt->GetRecurrencePattern();
_AppointmentItemPtr _olAppt = recurPattern->GetOccurrence(recurPattern->GetPatternStartDate()+recurPattern->GetStartTime());