В настоящее время я работаю над надстройкой C# .NET для Microsoft Outlook. Целью этой надстройки является сбор результатов поиска из мгновенного поиска Outlook и отображение на настраиваемой панели моих собственные результаты поиска.
Это работает очень хорошо, и с подклассом окна Outlook с собственным окном я получаю строку поиска, и она уже передает ее на мою панель.
Теперь проблема заключается в том, что когда вы закрываете надстройку (через "Файл->Параметры->Надстройки->Надстройки COM", но не с X на панели), надстройка мгновенно прекращает работу, и я не могу вызвать searchboxWindow.ReleaseHandle()
заранее, чтобы восстановить цепочку WndProc. Outlook просто вылетает без видимых ошибок.
protected override void WndProc(ref Message m)
{
base.WndProc(ref m);
switch ((uint)m.Msg)
{
case WindowMessages.WM_DESTROY:
case WindowMessages.WM_QUIT:
case WindowMessages.WM_NCDESTROY:
this.ReleaseHandle();
return;
case WindowMessages.WM_KEYUP:
case WindowMessages.WM_LBUTTONDOWN:
case WindowMessages.WM_RBUTTONDOWN:
OnKeyUp();
break;
case WindowMessages.WM_EXITSIZEMOVE:
OnResize();
break;
}
}
Я уже пытался прослушать несколько оконных сообщений, которые должны вызываться при закрытии надстройки, но эти сообщения появляются только при обычном закрытии Outlook.
Кроме того, события в основном исходном файле надстройки, такие как AppDomain.CurrentDomain.ProcessExit
, this.Shutdown
или ((Outlook.ApplicationEvents_10_Event)this.Application).Quit
, не вызываются.
Какое событие я могу прослушать, которое (надежно) запускается при завершении работы надстройки? Есть некоторые? Если нет, то какие у меня есть альтернативы для решения моей проблемы?