2009-10-12 87 views
82

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

有没有一种等价的方式来获得WPF窗口的句柄?

我发现下面的代码在网上,

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

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

谢谢!

+20

让我给你一些友好的建议,埃文。不要做货物崇拜编程!解析你在网上找到的代码。你可以清楚地看到它通过了Application.Current.MainWindow,并且你可以通过将它引用到另一个窗口来推断它,你会得到你的答案。我从来没有使用WindowInteropHelper,但仍然能够回答这个问题,只是推理出来。 – 2009-10-12 18:44:01

+1

你是对的,谢谢!我今天很累 :)。 – Evan 2009-10-12 18:59:33

+5

没问题!我不是故意把它当作批评,只是为了帮助。我们都时不时地做了一些小小的货物检查。 :) – 2009-10-12 19:02:03

回答

111

好吧,不要传递Application.Current.MainWindow,而只需传递一个引用到你想要的任何一个窗口:new WindowInteropHelper(this).Handle等等。

32

只需使用你的窗口与WindowsInteropHelper类:

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

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

3

如果你想为所有应用程序的Window S代表某种原因的窗口句柄,可以使用Application.Windows属性来获取在所有的Windows,然后使用WindowInteropHandler在他们的手柄让你已经证明了。

6

你可以使用:

Process.GetCurrentProcess().MainWindowHandle 
+5

他已经说他不想要主窗口 – EaterOfCode 2013-03-08 21:01:51