Encontrando o identificador para uma janela WPF


109

O Windows forms tinha uma propriedade win1.Handle que, se bem me lembro, retorna o identificador do identificador da janela principal?

Existe uma maneira equivalente de obter o identificador de uma janela WPF?

Encontrei o seguinte código online,

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

mas não acho que isso vai me ajudar porque meu aplicativo tem várias janelas.

Obrigado!!


24
Deixe-me dar um conselho amigável, Evan. Não faça programação cult de carga! Dissecar o código que você encontrou online. Você pode ver claramente que ele passa por Application.Current.MainWindow e, a partir disso, pode raciocinar que, ao passar uma referência para uma janela diferente, você obterá sua resposta. Eu nunca usei WindowInteropHelper, mas ainda era capaz de responder à pergunta simplesmente raciocinando.
Gregory Higley,

1
você está certo, obrigado! Estou cansado hoje :).
Evan

5
Sem problemas! E eu não quis dizer isso como crítica, apenas para ajudar. Todos nós fizemos um pequeno culto à carga de vez em quando. :)
Gregory Higley

Respostas:


142

Bem, em vez de passar Application.Current.MainWindow, apenas passe uma referência para qualquer janela que você quiser: new WindowInteropHelper(this).Handlee assim por diante.


Acabei de descobrir que a caixa de diálogo comum FileSave faz referência a uma janela de nível superior, portanto, você pode passar, por exemplo, uma referência à MainWindow do aplicativo. Economize serviços de interoperabilidade para quando você realmente precisar.
David A. Gray

39

Basta usar sua janela com a classe WindowsInteropHelper:

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

No momento, você está pedindo a janela principal do aplicativo, da qual sempre haverá uma. Você pode usar essa mesma técnica em qualquer Window, entretanto, desde que seja uma classe Window derivada de System.Windows.Window.


8

você pode usar :

Process.GetCurrentProcess().MainWindowHandle

3

Se você quiser identificadores de janela para TODOS os seus aplicativos Windowpor algum motivo, você pode usar a Application.Windowspropriedade para obter todas as janelas e, em seguida, usar WindowInteropHandlerpara obter os identificadores como já demonstrou.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.