デスクトップ版Outlookで受信済みの未読メッセージの一つを選択すると数秒後に既読状態になるように設定していますが、既読に変わる際のイベントをきっかけに、未読メールの件数を表示するVSTOアドインを作ろうとしています。
手始めに、ItemChangeイベントを利用してみたのですが、この場合、既読への変化以外(例えばフラグの設定など)にも反応してしまいます。(①の箇所)
そこで、PropertyChangeイベントを利用して、コールバックメソッド内で、変更されたプロパティが既読に関するものかを判別する処理を実現しようとしたのですが、反応しません。
mailItemオブジェクトは取得できているようなので(②の箇所)、どうも、 イベントハンドラの登録ができていないようです。 (③の箇所)
ネット上の情報を見よう見まねで作ったので、おそらく何か根本的なミスをしていると思うのですが、どのようにすれば既読状態の変化だけを捉える事ができるでしょうか。
追記:どうも最初にメッセージボックスを表示させる(⓪の箇所)と、③の箇所も正常に機能するようです。
該当のソースコード
VSの新しいプロジェクトの作成から「Outlook VSTOアドイン」を選び、ThisAddin.csのpublic partial class ThisAddIn内に以下を記述(抜粋)
Outlook.NameSpace outlookNameSpace; Outlook.MAPIFolder inbox; Outlook.Items items; Outlook.MailItem mailItem; private void ThisAddIn_Startup(object sender, System.EventArgs e) { Outlook.NameSpace ns = Application.GetNamespace("MAPI"); Outlook.MAPIFolder inbox = ns.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox); MessageBox.Show("テスト"); //----⓪ items = inbox.Items; items.ItemChange += new Outlook.ItemsEvents_ItemChangeEventHandler(ItemChange); //----①これは動く foreach (Object item in inbox.Items) { if (item != null) { Outlook.MailItem mailItem = item as Outlook.MailItem; Debug.WriteLine(mailItem.Subject); //----②これは取得できている mailItem.PropertyChange += new ItemEvents_10_PropertyChangeEventHandler(PropertyChange); //----③これは動かない } } } void ItemChange(object item) { Debug.WriteLine( "変わった"); } void PropertyChange(string name) { if (name == "UnRead") { Debug.WriteLine("既読になった"); } }
C#
補足情報(FW/ツールのバージョンなど)
Win10 64bit
Microsoft Visual Studio Community 2019 Version 16.6.5
Office 2019 Outlook 16.0 64bit
あなたの回答
tips
プレビュー