2009-02-18 130 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