UPDATE: Обновленный код ниже, используя пример кода, адаптированный this blog post, который будет работать лучше в более широком разнообразии установок Outlook (например, те, используя как обмен и PST или доступа несколько почтовых ящиков Exchange).
Вот код, который работал на меня в Outlook 2007, чтобы установить состояние отсутствия на работе от внешнего (для Outlook) EXE:
Microsoft.Office.Interop.Outlook.Application app = new Microsoft.Office.Interop.Outlook.ApplicationClass();
Microsoft.Office.Interop.Outlook.NameSpace ns = app.Session;
foreach (Microsoft.Office.Interop.Outlook.Store store in ns.Stores)
{
if (store.ExchangeStoreType == Microsoft.Office.Interop.Outlook.OlExchangeStoreType.olPrimaryExchangeMailbox)
{
store.PropertyAccessor.SetProperty("http://schemas.microsoft.com/mapi/proptag/0x661D000B", true); // false to turn off OOF
break;
}
}
Убедитесь, что вы не работаете, что код от имени администратора и перспективы, как non-Administrator - в противном случае вы можете получить связанную с безопасностью ошибку в Vista.
Обратите внимание, что в Outlook появятся диалоговые окна безопасности, чтобы убедиться, что пользователь в порядке, обращаясь к объектной модели Outlook. Это нормально, когда объектная модель Outlook доступна из внешнего EXE.
Если, однако, вы получаете доступ к объектной модели из надстройки, приведенный выше код не совсем корректен: вместо создания нового объекта Outlook.Application через конструктор вам необходимо получить ссылку для доверенного объекта Outlook.Application из внутри надстройки, как это:
Microsoft.Office.Interop.Outlook.NameSpace ns = this.Application.Session;
foreach (Microsoft.Office.Interop.Outlook.Store store in ns.Stores)
{
if (store.ExchangeStoreType == Microsoft.Office.Interop.Outlook.OlExchangeStoreType.olPrimaryExchangeMailbox)
{
store.PropertyAccessor.SetProperty("http://schemas.microsoft.com/mapi/proptag/0x661D000B", true); // false to turn off OOF
break;
}
}
BTW, есть хороший MSDN article по безопасности для надстроек, которые могут быть полезны, если вы бежите в диалоги безопасности или ошибки.
'OlBusyStatus' предназначен для' AppointmentItem.BusyStatus'. –