Suchen des Handles zu einem WPF-Fenster

108

Windows Forms hatten eine Eigenschaft win1.Handle, die, wenn ich mich recht erinnere, das Handle des Hauptfensterhandles zurückgibt?

Gibt es eine gleichwertige Möglichkeit, das Handle eines WPF-Fensters zu erhalten?

Ich habe den folgenden Code online gefunden:

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

Aber ich denke nicht, dass mir das helfen wird, da meine Anwendung mehrere Fenster hat.

Vielen Dank!!

Evan
quelle
24
Lass mich dir einen freundlichen Rat geben, Evan. Mach keine Frachtkultprogrammierung! Zerlegen Sie den Code, den Sie online gefunden haben. Sie können deutlich sehen, dass es Application.Current.MainWindow besteht, und daraus können Sie schließen, dass Sie Ihre Antwort erhalten, wenn Sie einen Verweis auf ein anderes Fenster übergeben. Ich habe WindowInteropHelper noch nie verwendet, konnte die Frage aber trotzdem beantworten, indem ich sie einfach begründete.
Gregory Higley
1
du hast recht, danke! heute bin ich müde :).
Evan
5
Kein Problem! Und ich habe es nicht als Kritik gemeint, nur um hilfreich zu sein. Wir haben alle ab und zu ein bisschen Frachtkult gemacht. :)
Gregory Higley

Antworten:

141

Nun, anstatt zu übergeben Application.Current.MainWindow, übergeben Sie einfach einen Verweis auf das gewünschte Fenster: new WindowInteropHelper(this).Handleund so weiter.

Gregory Higley
quelle
Ich habe gerade festgestellt, dass das allgemeine Dialogfeld "FileSave" einen Verweis auf ein Fenster der obersten Ebene enthält, sodass Sie beispielsweise einen Verweis auf das MainWindow der Anwendung übergeben können. Speichern Sie Interop-Dienste, wenn Sie sie wirklich benötigen.
David A. Gray
39

Verwenden Sie einfach Ihr Fenster mit der WindowsInteropHelper-Klasse:

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

Im Moment fragen Sie nach dem Hauptfenster der Anwendung, von dem es immer eines geben wird. Sie können dieselbe Technik jedoch für jedes Fenster verwenden, vorausgesetzt, es handelt sich um eine von System.Windows.Window abgeleitete Fensterklasse.

Reed Copsey
quelle
8

Sie können verwenden:

Process.GetCurrentProcess().MainWindowHandle
Amer Sawan
quelle
3

Wenn Sie Windowaus irgendeinem Grund Fensterhandles für ALLE Anwendungen verwenden möchten , können Sie die Application.WindowsEigenschaft verwenden, um auf alle Windows zuzugreifen, und dann verwenden WindowInteropHandler, um auf deren Handles zuzugreifen, wie Sie bereits gezeigt haben.

Dustyburwell
quelle