我目前正在开发一个适用于 Microsoft Outlook 的 C# .NET 插件。 该插件的目标是捕获 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时,这些消息只出现一次。
此外,主要的Add-In源文件中的事件,如AppDomain.CurrentDomain.ProcessExit
、this.Shutdown
或((Outlook.ApplicationEvents_10_Event)this.Application).Quit
都没有被调用。
有哪些事件可以监听,能够可靠地在插件终止时触发?如果没有,我有哪些解决问题的替代方案?