Мое приложение C# должно работать с Outlook. Я реализовал метод, который позволяет загрузить Outlook, если он еще не включен. После этого метода загрузки мне нужно начать работу с электронной почтой, прочитать папку «Входящие» и т. Д. , очевидно, что все эти поведения должны выполняться, когда Outlook включен, в частности, если основные окна Outlook готовы.Как быть уверенным, что приложение Outlook полностью загружено (событие application.StartUp)
Глядя на OOM, я нашел приложение Startup
, и я думаю, что могу использовать его, чтобы убедиться, что приложение готово ... но я не знаю, как его использовать.
Чтобы разделить идею о том, что я пытаюсь сделать, здесь есть код (упрощенный):
Главная:
OutlookProvider p= new OutlookProvider();
p.Connect();
if(p.AppIsOn) {
// TO DO: start working
}
else
throw new Exception("Error; Unable to connect to Outlook.");
OutlookProvider класс:
#region Fields
Outlook.Application oApp;
Outlook.MailItem oMail;
bool AppIsOn;
#endregion
OutlookProvider() { AppIsOn= false; }
Connect() {
try {
// try to connect to the possible running Outlook instance
oApp = (Outlook.Application)Marshal.GetActiveObject("Outlook.Application");
AppIsOn= true;
}
catch(Exception exc) {
// Outlook is not running, so I create my own Outlook instance
// here my app is null so an Exception will be thrown
oApp.Startup += new Outlook.ApplicationEvents_11_StartupEventHandler(SetAppIsOn);
oApp= (Outlook.Application)new Outlook.Application();
}
}
void SetAppIsOn() { AppIsOn= true;}
Может Я использую это событие для решения моей проблемы? И если да, то как я могу реализовать метод Connect(), чтобы установить переменную boolean AppIsOn
?
Благодарим за ответ. 'GetActiveObject()' была моей проблемой ... во второй раз, когда я пытался подключиться к существующему экземпляру outlook, он выбрал исключение («Исключение из HRESULT: 0x800401E3 (MK_E_UNAVAILABLE)»). Я решаю свою проблему, изменяя ее с помощью Activator.CreateInstance (Type.GetTypeFromProgID («Outlook.Application»)) как Microsoft.Office.Interop.Outlook.Application; '. Очень интересно, что [здесь] (https://msdn.microsoft.com/en-us/library/office/ff462097.aspx) MS предлагает использовать GetActiveObject(). – baru
Метод Logon используется только для входа в определенный профиль, когда Outlook еще не запущен, а не для его инициализации. Нет способа инициализации Outlook. –
Если вы не знаете, что Outlook уже запущен, вы всегда можете вызвать Logon - он войдет в систему, если Outlook еще не запущен и ничего не делает, если это так. –