Znajdowanie uchwytu do okna WPF

109

Formularze Windows miały właściwość win1.Handle, która, jeśli dobrze pamiętam, zwraca uchwyt uchwytu głównego okna?

Czy istnieje równoważny sposób uzyskania uchwytu okna WPF?

Znalazłem następujący kod online,

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

ale nie sądzę, że to mi pomoże, ponieważ moja aplikacja ma wiele okien.

Dzięki!!

Evan
źródło
24
Pozwól, że dam ci przyjacielską radę, Evan. Nie rób kultowego programowania cargo! Sprawdź kod znaleziony w Internecie. Możesz wyraźnie zobaczyć, że przechodzi on przez Application.Current.MainWindow i na tej podstawie możesz wnioskować, że przekazując mu odniesienie do innego okna, otrzymasz odpowiedź. Nigdy nie korzystałem z WindowInteropHelper, ale nadal byłem w stanie odpowiedzieć na pytanie, po prostu rozumując.
Gregory Higley
1
masz rację, dzięki! Dziś jestem zmęczony :).
Evan,
5
Nie ma problemu! I nie chciałem tego traktować jako krytyki, tylko po to, żeby być pomocnym. Wszyscy od czasu do czasu zajmowaliśmy się kultywowaniem ładunków. :)
Gregory Higley

Odpowiedzi:

142

Cóż, zamiast przekazywać Application.Current.MainWindow, po prostu podaj odniesienie do dowolnego okna, które chcesz: new WindowInteropHelper(this).Handlei tak dalej.

Gregory Higley
źródło
Właśnie odkryłem, że wspólne okno dialogowe FileSave pobiera odniesienie do okna najwyższego poziomu, więc można przekazać, na przykład, odniesienie do okna MainWindow aplikacji. Zapisz usługi Interop, gdy naprawdę ich potrzebujesz.
David A. Grey
39

Po prostu użyj swojego okna z klasą WindowsInteropHelper:

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

W tej chwili pytasz o główne okno aplikacji, które zawsze będzie dostępne. Tej samej techniki można użyć w każdym oknie, jednak pod warunkiem, że jest to klasa okna pochodna System.Windows.Window.

Reed Copsey
źródło
8

możesz użyć :

Process.GetCurrentProcess().MainWindowHandle
Amer Sawan
źródło
3

Jeśli Windowz jakiegoś powodu chcesz mieć uchwyty okien dla WSZYSTKICH aplikacji , możesz użyć tej Application.Windowswłaściwości, aby uzyskać dostęp do wszystkich okien, a następnie użyć, WindowInteropHandleraby uzyskać dostęp do ich uchwytów, jak już zademonstrowałeś.

dustyburwell
źródło