2009-02-18 174 views
24

我有下面的類聲明:獲取窗口的句柄在C#

public partial class MainWindow : Window 

,我需要得到窗口的實際手柄一旦窗口有一個。我怎樣才能做到這一點,我應該在哪裏放置查詢功能。

我試過到目前爲止是:

IntPtr hwnd = new WindowInteropHelper(this).Handle; 

但是手柄我得到的回覆是0,這可能是因爲它被種植在OnInitialized - 也許窗口還沒有準備好,在那個階段。 而且,是的 - 它通過WPF連接,謝謝你指出!

感謝

+0

WPF或winforms? – 2009-02-18 19:06:21

+0

我們是否假設「WindowInteropHelper」的類型是System.Windows.Forms.Form? – 2009-02-18 19:21:17

回答

25

OnInitialized方法手柄尚未建立。但你在正確的軌道上。如果您將電話撥入Loaded事件,手柄將被創建,並且它應返回正確的手柄

0
[DllImport("user32.dll", EntryPoint = "FindWindowEx")] 
     public static extern int FindWindowEx(int hwndParent, int hwndEnfant, int lpClasse, string lpTitre); 


int hwnd = FindWindowEx(0, 0, 0, title);//where title is the windowtitle 

       //verification of the window 
       if (hwnd == 0) 
       { 
        throw new Exception("Window not found"); 
       } 
6

最早的地方你可以得到句柄是OnSourceInitialized