2009-02-18 10 views
24

que tienen la siguiente clase declaró:Conseguir el manipulador de ventana en C#

public partial class MainWindow : Window 

y necesito para obtener el identificador actual de la ventana una vez que la ventana tiene una. ¿Cómo puedo hacer eso y dónde debo poner la función de consulta?

Lo he intentado hasta ahora era:

IntPtr hwnd = new WindowInteropHelper(this).Handle; 

Pero el mango que se obtiene es 0, lo que podría ser debido a que fue plantado en OnInitialized - tal vez la ventana no está listo todavía en esa etapa. Y, sí, está conectado a través de WPF, ¡gracias por señalarlo!

Gracias

+0

WPF o winforms? –

+0

¿Debemos suponer que "WindowInteropHelper" es del tipo System.Windows.Forms.Form? –

+0

De su uso de WindowInteropHelper, creo que es WPF (http://msdn.microsoft.com/en-us/library/system.windows.interop.windowinterophelper.aspx) –

Respuesta

25

En el método OnInitialized el mangoaún no ha sido creado. Pero estás en el camino correcto. Si realiza la llamada en el evento Loaded, se habrá creado , mango, y se devolverá el identificador correcto.

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, esto funciona para WPF? –

+3

En la publicación original, el póster intenta recuperar el identificador antes de que se cree, por lo que este método siempre fallará. La mayoría de los parámetros int deberían ser IntPtr, en una plataforma de 64 bits esto fallaría espectacularmente. Finalmente, esto solo buscará ventanas de nivel superior. –

6

El primer lugar donde se puede obtener el identificador es OnSourceInitialized

Cuestiones relacionadas