2015-08-03 85 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等)將可以正常工作。 –

相關問題