2010-10-22 17 views
10

Im utilizando el método FindWindow de user32.dll para encontrar una ventana y obtener el identificador, pero ¿es posible obtener el control de formulario desde el controlador? y el uso como una forma ordinaria? Ejemplo:De HWND para controlar

int myhwnd = FindWindow(null, "MyWindow"); 
form myform = SomeMagic.GetFormFromHandle(myhwnd); 
myform.Visible = false; 

o tengo que seguir utilizando los métodos de user32.dll para enviar un mensaje a la ventana?

Respuesta

14

Si se trata de una ventana administrada (la ha creado con System.Windows.Forms, y ha heredado de System.Windows.Forms.Control) puede obtener una referencia al Objeto de Control con

Control.FromHandle(myIntPtr); 

Luego solo obtiene el padre del control hasta que obtenga el formulario.

Si no, no puede obtener un objeto Control, lo que sí puede hacer es crear una NativeWindow y asignar el identificador IntPtr al objeto con AssignHandle. Eso al menos te dará acceso al WndProc, y similar, pero eso es todo.

1

Es muy difícil envolver una clase de formulario alrededor del identificador de ventana Win32. No existe una implementación completa proporcionada por Microsoft. Por lo tanto, debe usar funciones nativas solo para comunicarse con un controlador determinado.

2

¿Has probado Control.FromHandle()? Las formas son (heredan de) Controles. Si tocas un control anidado, deberás buscar a través de sus padres hasta que llegues a tu Formulario.

Esto supone que realmente hay un Form en alguna parte, y que acaba de utilizar los métodos user32 para localizar su HWND.

Cuestiones relacionadas