Trovare l'handle per una finestra WPF


109

Windows Form aveva una proprietà win1.Handle che, se ricordo bene, restituisce l'handle dell'handle della finestra principale?

Esiste un modo equivalente per ottenere l'handle di una finestra WPF?

Ho trovato il seguente codice online,

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

ma non credo che questo mi aiuterà perché la mia applicazione ha più finestre.

Grazie!!


24
Lascia che ti dia qualche consiglio amichevole, Evan. Non fare programmazione cult del carico! Analizza il codice che hai trovato online. Puoi vedere chiaramente che passa Application.Current.MainWindow, e da ciò puoi dedurre che passandogli un riferimento a una finestra diversa, otterrai la tua risposta. Non ho mai usato WindowInteropHelper, ma sono stato comunque in grado di rispondere alla domanda semplicemente ragionando.
Gregory Higley,

1
hai ragione, grazie! sono stanco oggi :).
Evan

5
Nessun problema! E non lo intendevo come critica, solo per essere d'aiuto. Abbiamo tutti fatto un po 'di culto del carico di tanto in tanto. :)
Gregory Higley

Risposte:


142

Ebbene, invece di passare Application.Current.MainWindow, passa semplicemente un riferimento alla finestra che desideri: new WindowInteropHelper(this).Handlee così via.


Ho appena scoperto che la finestra di dialogo comune FileSave prende un riferimento a una finestra di primo livello, quindi puoi passare, ad esempio, un riferimento alla MainWindow dell'applicazione. Salva i servizi di interoperabilità per quando ne hai veramente bisogno.
David A. Gray,

39

Usa la tua finestra con la classe WindowsInteropHelper:

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

In questo momento, stai chiedendo la finestra principale dell'applicazione, di cui ce ne sarà sempre una. È possibile utilizzare la stessa tecnica su qualsiasi Window, tuttavia, a condizione che sia una classe Window derivata da System.Windows.Window.



3

Se Windowper qualche motivo vuoi gli handle di finestra per TUTTE le tue applicazioni , puoi usare la Application.Windowsproprietà per ottenere tutte le finestre e quindi usare WindowInteropHandlerper ottenere i loro handle come hai già dimostrato.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.