2016-12-05 4 views
2

Google은 Outlook의 오른쪽에로드되는 추가 기능 익스프레스 영역을 사용하고 있습니다. 해당 양식 영역에는 하나의 사용자 정의 컨트롤 MyContainer이 있습니다. 여기에는 두 개의 컨트롤이 있습니다.현재 (포커스가 맞은) Outlook 창에 어떤 객체가 있는지를 정확히 알 수있는 방법. 익스플로러 유형 또는 관리자 유형

MyContainer에서 우리는 각 하위 컨트롤의 가시성을 결정해야합니다.

ActiveInspectorActiveExplorer과 관련된 방법은 신뢰할 수 없습니다.

열기 이상의 메인 탐색기 윈도우 하나 작성 창보다, I는 익스플로러 뷰를 전환하는 일; 보낸 편지함, 보낼 편지함 등. 나는 여전히 탐색기 및 검사기 개체를 찾습니다.

내 지역 또는 MyContainer 컨트롤이로드되는 창이 작성/읽기 또는 기본 탐색기 (받은 편지함/보낸 편지함/임시 보관함/보낼 편지함)인지 확인하는 좋은 방법이 필요합니다.

나는 여러 가지 시도를했지만 성공하지 못했습니다.

어떤 조언이나 제안이 도움이 될 것입니다.

답변

3

시도 Application.ActiveWindow (Explorer 또는 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); 
       } 
      }