2016-06-16 6 views
0

내 Word 추가 기능에 여러 WPF 대화 상자가 있습니다. 그들 중 한 명 (그리고 이상하게도 하나)에 대해, 때로는 열 때 초점을 맞추지 않습니다. 나는 그 부모를 설정할 필요가 있다고 생각합니다.WPF 창과 함께 사용할 Word의 창 핸들 가져 오기

나는 a way to set the owner of a WPF window to a HWND을 알고 있지만 Word 2010에서 HWND를 얻을 수있는 방법이 있습니까? this HWND property이 발견되었지만 Word 2013 이상 버전 만 있습니다. GetForegroundWindow()를 사용하는 것 외에도 Word의 HWND를 얻는 다른 방법이 있습니까? 실제로 원하는 창 (또는 다른 유사한 kludge)에 대한 핸들을 보장하지 않습니까?

답변

0

Get specific window handle using Office interop에 도움이되는 것을 발견했습니다. 하지만 그 모든 대답은 새로 생성하는 창에 대한 핸들을 얻는 데 기반합니다. 나는 기존의 윈도우를 얻기 위해 다소 수정했고 유틸리티 메소드에 그것을 채웠다.

doc은 현재 문서입니다.

using System.Windows.Interop; 
using System.Diagnostics; 

public void SetOwner(System.Windows.Window pd) 
{ 
    var wordProcs = Process.GetProcessesByName("winword").ToList(); 
    // in read-only mode, this would be e.g. "1.docx [Read-Only] - Microsoft Word" 
    var procs = wordProcs.Where(x => 
      x.MainWindowTitle.StartsWith(Path.GetFileName(doc.FullName)) 
      && 
      x.MainWindowTitle.EndsWith("- Microsoft Word")); 
    if (procs.Count() >= 1) 
    { 
     // would prefer Word 2013's Window.HWND property for this 
     var handle = procs.First().MainWindowHandle; 
     WindowInteropHelper wih = new WindowInteropHelper(pd); 
     wih.Owner = handle; 
    } 
} 

불행하게도 프로세스의 수는 1보다 결코 크기 때문에, (다른 폴더에있는) 같은 문서 이름을 가진 여러 개의 창을 설명 할 수있을 것 같지 않습니다하지만 그 허용 한계라고 생각 .