2012-05-20 2 views
42

내 WPF 응용 프로그램에 둘 이상의 창이 있습니다. Win32 API 호출에서 사용할 수 있도록 각 Window 인스턴스의 hWnd를 가져올 수 있어야합니다.Window 인스턴스의 hWnd를 얻는 방법은 무엇입니까?

무엇의 예 I하기를 원하십니까 :

Window myCurrentWindow = Window.GetWindow(this); 
IntPtr myhWnd = myCurrentWindow.hWnd; // Except this property doesn't exist. 

이 작업을 수행하는 가장 좋은 방법은 무엇입니까?

+2

가능한 복제본 [WPF Popup 컨트롤의 Hwnd를 얻을 수 있습니까?] (http://stackoverflow.com/questions/7815121/is-it-possible-to-get-the-hwnd-of- a-wpf-popup-control) –

+2

@HansPassant : 다른 질문은 팝업창과 관련이 있으며 실제 창이 아닙니다. (예,이 질문은 간접적으로 답변되었지만 중복이 아닙니다.) – Douglas

답변

58

WindowInteropHelper은 (는) 친구입니다. Window 매개 변수를 허용하는 생성자와 해당 창 핸들을 반환하는 Handle 속성이 있습니다. 더글러스의 대답에 확장

Window window = Window.GetWindow(this); 
var wih = new WindowInteropHelper(window); 
IntPtr hWnd = wih.Handle; 
9

Window 아직 표시되지 않은 경우, 그것은 HWND이 없을 수 있습니다.

var window = Window.GetWindow(element); 

IntPtr hWnd = new WindowInteropHelper(window).EnsureHandle(); 

Window.GeWindownull을 반환 할 수 있습니다, 그래서 당신은 정말 너무 것을 테스트해야합니다 : 당신은 창을 EnsureHandle()을 사용하여 표시하기 전에 하나를 만들 수 강제 할 수 있습니다.

관련 문제