2010-04-29 37 views
18

Estoy usando una clase de terceros que genera una instancia de Internet Explorer. Esta clase tiene una propiedad, hWnd, que devuelve el hWnd del proceso.¿Cómo puedo saber si un hWnd determinado sigue siendo válido?

Más adelante, es posible que desee volver a utilizar la instancia de la aplicación si aún existe, por lo que necesito decirle a mi clase de ayuda que se una a ella. Antes de hacer eso, me gustaría saber si el hWnd dado todavía es válido, de lo contrario generaré otra instancia.

¿Cómo puedo hacer esto en C# & .NET 3.5?

Respuesta

29

Si se trata de un identificador de ventana, puede llamar isWindow(hWnd);

De MSDN:

Valor de retorno

BOOL

Si el identificador de ventana identifica una ventana existente , la el valor de retorno es distinto de cero.

Si el identificador de ventana no identifica una ventana existente, el valor de retorno es cero. Observaciones

Un hilo no debe utilizar IsWindow para una ventana que no creó porque la ventana puede ser destruida después esta función se llama. Además, porque las manijas de las ventanas se reciclan , la manija incluso podría apuntar a una ventana diferente de .

Por cierto ya que estás en .NET que tendrá que hacer algo como:

[DllImport("user32.dll")] 
[return: MarshalAs(UnmanagedType.Bool)] 
static extern bool IsWindow(IntPtr hWnd); 
+0

perfecto, exactamente lo que estaba buscando. ¡Gracias por la ayuda! –

+5

Un punto a tener en cuenta, el atributo DllImport está en el espacio de nombres System.Runtime.InteropServices. –

Cuestiones relacionadas