UPDATE: Aktualizacja poniższy kod za pomocą przykładowego kodu adaptacją this blog post który będzie działał lepiej w szerszej gamy instalacji programu Outlook (na przykład te, wykorzystując zarówno Exchange i PST lub dostępu wiele skrzynek pocztowych Exchange).
Oto kod, który pracował dla mnie na Outlook 2007, aby ustawić status OOF z zewnętrznego (do 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;
}
}
Upewnij się, że nie używasz tego kodu jako administrator i Outlook jako nie-administrator - w przeciwnym razie może wystąpić błąd związany z bezpieczeństwem w systemie Vista.
Należy pamiętać, że pojawi się okno dialogowe zabezpieczeń w programie Outlook, aby upewnić się, że użytkownik jest w porządku podczas uzyskiwania dostępu do modelu obiektów programu Outlook. Jest to normalne, gdy model obiektu Outlook jest dostępny z zewnętrznego EXE.
Jeśli jednak uzyskujesz dostęp do modelu obiektowego z dodatku, powyższy kod nie jest w pełni poprawny: zamiast tworzyć nowy obiekt Outlook.Application za pośrednictwem konstruktora, musisz uzyskać odwołanie do zaufanego obiektu Outlook.Application od wewnątrz dodatku w następujący sposób:
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, istnieje duża MSDN article na zabezpieczenie dodatków, które mogą być przydatne, jeśli napotkasz dialogowych zabezpieczeń lub błędów.
'OlBusyStatus' jest dla' AppointmentItem.BusyStatus'. –