WPF 창에 대한 핸들 찾기


109

Windows Forms에는 win1.Handle 속성이 있는데, 기억하면 주 창 핸들의 핸들을 반환합니까?

WPF 창 핸들을 얻는 동등한 방법이 있습니까?

온라인에서 다음 코드를 찾았습니다.

IntPtr windowHandle = new WindowInteropHelper(Application.Current.MainWindow).Handle;

하지만 내 응용 프로그램에 여러 개의 창이 있기 때문에 도움이 될 것이라고 생각하지 않습니다.

감사!!


24
친절한 조언을 해드릴 게요, Evan. 화물 컬트 프로그래밍을하지 마십시오! 온라인에서 찾은 코드를 분석하십시오. Application.Current.MainWindow를 전달한다는 것을 분명히 알 수 있으며, 다른 창에 대한 참조를 전달하여 답을 얻을 수 있다고 추론 할 수 있습니다. WindowInteropHelper를 사용한 적이 없지만 단순히 추론하여 질문에 대답 할 수있었습니다.
Gregory Higley

1
당신 말이 맞아요, 감사합니다! 나는 오늘 피곤하다 :).
Evan

5
문제 없어요! 그리고 나는 그것을 비판으로 말하는 것이 아니라 단지 도움을주기 위해서였습니다. 우리는 가끔화물 컬트를 약간 해왔습니다. :)
Gregory Higley

답변:


142

글쎄, 전달하는 대신 Application.Current.MainWindow원하는 창에 대한 참조를 전달하십시오 new WindowInteropHelper(this).Handle.


방금 FileSave 공통 대화 상자가 최상위 창에 대한 참조를 가져 오므로 예를 들어 응용 프로그램의 MainWindow에 대한 참조를 전달할 수 있음을 발견했습니다. 정말로 필요할 때를 위해 Interop 서비스를 저장하십시오.
David A. Gray

39

WindowsInteropHelper 클래스와 함께 창을 사용하십시오.

// ... Window myWindow = get your Window instance...
IntPtr windowHandle = new WindowInteropHelper(myWindow).Handle;

지금 당장은 항상 하나가있는 애플리케이션의 기본 창을 요청하고 있습니다. 그러나 System.Windows.Window에서 파생 된 Window 클래스 인 경우 모든 Window에서 이와 동일한 기술을 사용할 수 있습니다.



3

Window어떤 이유로 응용 프로그램의 모든 창 핸들을 원하는 경우 Application.Windows속성을 사용하여 모든 Windows를 가져온 다음 WindowInteropHandler이미 시연 한대로 해당 핸들을 가져 오는 데 사용할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.