2009-02-18 16 views
24

Mam następujące klasy oświadczył:Pierwsze uchwyt okna w C#

public partial class MainWindow : Window 

I muszę uzyskać rzeczywiste uchwyt okna, gdy okno ma. Jak mogę to zrobić i gdzie powinienem umieścić funkcję zapytania.

Co próbowałem dotąd była:

IntPtr hwnd = new WindowInteropHelper(this).Handle; 

Ale uchwyt wrócę wynosi 0, co może być, ponieważ został obsadzony w OnInitialized - może okno nie jest jeszcze gotowy na tym etapie. I tak - jest połączony za pośrednictwem WPF, dziękuję za wskazanie!

Dzięki

+0

WPF lub winformy? –

+0

Czy założymy, że "WindowInteropHelper" jest typu System.Windows.Forms.Form? –

+0

Z ich użycia WindowInteropHelper, myślę, że to WPF (http://msdn.microsoft.com/en-us/library/system.windows.interop.windowinterophelper.aspx) –

Odpowiedz

25

W metodzie OnInitializeduchwyt nie został jeszcze utworzony. Ale jesteś na dobrej drodze. Jeśli przetworzysz połączenie w zdarzeniu Loaded, zostanie utworzone uchwyt i powinno ono zwrócić prawidłowy uchwyt .

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"); 
       } 
+0

Mez, to działa dla WPF? –

+3

W oryginalnym poście plakat próbuje odzyskać uchwyt przed jego utworzeniem, więc ta metoda zawsze zawiedzie. Większość parametrów int powinna być typu IntPtr, na 64-bitowej platformie to się nie powiedzie. Na koniec będzie to tylko wyszukiwanie w oknach najwyższego poziomu. –

6

Najwcześniejszym miejscem, w którym można uzyskać uchwyt, jest OnSourceInitialized

Powiązane problemy