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!!

Evan
fonte
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.

Gregory Higley
fonte
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.

Reed Copsey
fonte
8

você pode usar :

Process.GetCurrentProcess().MainWindowHandle
Amer Sawan
fonte
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.

Poço Poente
fonte