查找WPF窗口的句柄


109

Windows窗体具有属性win1.Handle,如果我记得,它返回主窗口句柄的句柄?

有没有等效的方法来获取WPF窗口的句柄?

我在网上找到了以下代码,

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

但我认为这对我没有帮助,因为我的应用程序有多个窗口。

谢谢!!


24
让我给你一些友善的建议,埃文。不要做崇拜的程序!剖析您在网上找到的代码。您可以清楚地看到它传递了Application.Current.MainWindow,从中可以推断出通过将其传递给其他窗口的引用,您将得到答案。我从未使用过WindowInteropHelper,但仍然能够通过推理就可以回答该问题。
格雷戈里·希格利

1
你说得对,谢谢!我今天很累 :)。
Evan

5
没问题!我并不是要批评别人,只是为了提供帮助。我们不时进行了一些货物培训。:)
Gregory Higley

Answers:


142

好吧,Application.Current.MainWindow与其传递,不如将引用传递给您想要的任何窗口:new WindowInteropHelper(this).Handle依此类推。


我刚刚发现FileSave常用对话框引用了顶级窗口,因此您可以传递例如对应用程序MainWindow的引用。将Interop服务保存在您真正需要的时候。
戴维·A·格雷,

39

只需将窗口与WindowsInteropHelper类一起使用:

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

现在,您需要的是应用程序的主窗口,其中始终会有一个。但是,只要它是System.Windows.Window派生的Window类,就可以在任何Window上使用相同的技术。



3

如果Window出于某种原因想要所有应用程序的窗口句柄,可以使用该Application.Windows属性获取所有Windows,然后使用WindowInteropHandler来获取它们的句柄,正如您已演示的那样。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.