2009-10-12 78 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