2015-08-03 54 views
0

我在outlook新消息窗口中有一个功能区按钮。 该按钮的用途是...... 如果有人按下该按钮,则标志将设置为真。如何获取当前窗口ID或某个Outlook新电子邮件窗口。

邮件发送期间,我想要在该标志上实现自定义逻辑基础。

但问题是,如果我打开两个窗口然后标志值持有当前窗口的状态是正常的。

我怎样才能得到当前窗口ItemSend事件或当前窗口的标志值。

回答

0

Outlook不会为其窗口分配任何ID。相反,您可以使用Window句柄(Windows API)。要获得句柄,您需要将检查器或资源管理器窗口转换为IOLEWindow界面,并使用检索句柄的GetWindow方法。

此外,您可以使用Inspector类的CurrentItem属性来获取显示的Outlook项目对象。保存的项目具有设置的EntryID属性值,其允许获得对象的唯一条目ID。以下是MSDN所述的内容:

MAPI存储提供程序在商店中创建商品时分配唯一的ID字符串。因此,直到它保存或发送,才能为Outlook项目设置EntryID属性。当一个项目被移动到另一个存储,例如,从收件箱到Microsoft Exchange服务器的公用文件夹,或者从一个个人文件夹(.pst)文件到另一个.pst文件中的条目ID改变。解决方案不应该依赖于EntryID属性是唯一的,除非项目不会被移动。

您也可以考虑使用您自己的ID添加用户属性。

0

在按钮的事件处理程序中,您传递了控制参数(类型为IRibbonControl)。阅读IRibbonControl.Context属性并将其转换为Inspector对象。然后,您可以读取Inspector.CurrentItem属性来检索显示的项目。

您也可以使用Application.ActiveInspector(然后Inspector.CurrentItem) - 为用户点击您的按钮,检查员应该变为活动,因此Application.ActiveInspector将检索托管您的按钮的检查器。

+0

是的我知道,但有一个问题。假设用户在新消息窗口中单击了我的按钮。 然后用户打开另一个新的消息窗口,它变成了Application.ActiveInspector。 – SKD

+0

只要用户点击按钮,您的事件处理程序将被调用。用户将无法执行任何操作(包括打开另一条消息),直到事件处理程序返回。它全部同步并发生在主Outlook线程上。如果您担心仍然可能发生,第一个解决方案(IRibbonControl.Context等)将可以正常工作。 –

相关问题