2016-12-05 7 views
2

アドインエクスプレス領域は、Outlookの右側にロードされています。そのフォーム領域には、1つのユーザーコントロールMyContainerがあります。これには2つのコントロールがあります。どのオブジェクトが現在(フォーカスされている)Outlookウィンドウであるかを確実に知る方法。エクスプローラタイプまたはインスペクタタイプ

MyContainerでは、各子コントロールの可視性を決定する必要があります。

ActiveInspectorActiveExplorerを含む方法は、信頼性がありません。

オープニングよりメインエクスプローラウィンドウ内の1つの作成ウィンドウよりも、私は、エクスプローラビューを切り替えることが起こります。私はまだエクスプローラとインスペクタのオブジェクトを見つける。

地域またはMyContainerコントロールがロードされているウィンドウが、作成/読み取りまたはメインエクスプローラ(受信トレイ/送信済み/下書き/送信トレイ)であることを確認するには、適切な方法が必要です。

私は多くのことを試しましたが、成功しませんでした。

どのような指針や提案が本当に役に立ちます。

答えて

3

try Application.ActiveWindowExplorerまたはInspectorのいずれかです)。

2

単純なif/else条件でジョブを実行できます。

主な問題は、Outlookからのインライン応答が使用されている場合です。

これはバージョン13以降で使用できます。そのため、空のtry/catchを使用してそれを処理します。

  Outlook.MailItem Email = null; 
      Outlook.Inspector actInspector = Outlook.Application.ActiveInspector(); 
      if (actInspector == null) 
      { 
       Outlook.Explorer explorer = Outlook.Application.ActiveExplorer(); 

       try 
       { 
        Email = explorer.GetType().InvokeMember("ActiveInlineResponse", System.Reflection.BindingFlags.GetProperty | System.Reflection.BindingFlags.Instance | 
          System.Reflection.BindingFlags.Public, null, explorer, null) as Outlook.MailItem; 
       } 
       finally 
       { 
        Marshal.ReleaseComObject(explorer); 
       } 
      } 
      else 
      { 
       try 
       { 
        Email = actInspector.CurrentItem as Outlook.MailItem; 
       } 
       finally 
       { 
        if (actInspector != null) Marshal.ReleaseComObject(actInspector); 
       } 
      } 
関連する問題