2

VB.net で VSTO を使用して、Visual Studio 2010 で Outlook アドインを作成しています。

今のところ、メールアイテムとポストアイテムを処理しています。メール アイテムまたは投稿アイテムが現在表示されているかどうかを判断する方法はありますか?

現在のフォルダーから別のフォルダーに移動する前に、表示されている (開いている) アイテム (存在する場合) をすべて閉じるだけです。

私はこれをよくグーグルで検索しましたが、私の質問に対する答えが見つかりませんでした。

前もって感謝します。

4

3 に答える 3

1

MailItem.EntryIDプロパティをチェックして、メールアイテムがのコレクションに存在し 、同じに関連付けられているApplication.Inspectorsかどうかを確認する必要があります。以下は、私が過去に使用した便利なヘルパーメソッドです。Inspector.CurrentItemEntryID

注:新しいメールアイテムには保存/送信されるまでが含まれないため、EntryIDこの手法は新しいメッセージ(作成中)には機能しません。

internal static bool HasInspector(Outlook.MailItem mailItem)
{
    bool HasInspector = false;
    try {
        if (mailItem == null || string.IsNullOrEmpty(mailItem.EntryID)) return HasInspector; // short-circuit invalid params or new mail message (no entryid since it's not saved)
        foreach (Outlook.Inspector inspector in Globals.ThisAddIn.Application.Inspectors)
        {
            Outlook.MailItem currentMailItem = inspector.CurrentItem as Outlook.MailItem;
            if (currentMailItem != null && !string.IsNullOrEmpty(currentMailItem.EntryID))
            {
                HasInspector = Globals.ThisAddIn.Application.Session.CompareEntryIDs(currentMailItem.EntryID, mailItem.EntryID);
                Marshal.ReleaseComObject(currentMailItem); currentMailItem = null; // resource RCW cleanup
            }
        }         
    }
    catch { } // attempt to request inspector for mailitem
    return HasInspector;
}
于 2012-05-17T13:13:03.333 に答える
0

Application.Inspectoes コレクションのインスペクターをループして、各インスペクターが CurrentItem プロパティを読み取ります (MailItem、ContactItem など、さまざまなタイプのオブジェクトを返すことができます)。EntryID プロパティを読み取り、Namespace.CompareEntryIDs を使用して問題の項目のエントリ ID と比較します。

于 2014-09-13T16:35:02.880 に答える