¿Por qué FindWindowEx no encuentra la etiqueta en mi ventana?

Estoy tratando de depurar una pequeña aplicación de controlador de prueba escrita en C#. Abre varias instancias de una aplicación de prueba que tenemos. La aplicación de prueba se conecta a un servidor y, cuando se conecta correctamente, muestra "REMOTE_CONNECTED" en una etiqueta. Entonces, el conductor de prueba está buscando eso antes de intentar ingresar datos a la aplicación de prueba.

Así es como se ve el código:

  Console.Out.WriteLine("MAIN HANDLE IN GETCONN: " + Hwnd);
  //Attempt to find if we have have connected to the remote server
  IntPtr connHwnd = FindWindowEx(Hwnd, IntPtr.Zero, null, "REMOTE_CONNECTED");

Ese connHwnd siempre regresa como IntPtr.Zero y el Hwnd impreso en la consola es el identificador que espero de la aplicación de prueba. El controlador de prueba permanece en un bucle durante un tiempo, llamando repetidamente al código anterior hasta que encuentra esa etiqueta. Puedo ver en la pantalla que la etiqueta muestra "REMOTE_CONNECTED" pero la función no la encuentra.

Además, otras personas han logrado que esto funcione en XP (mientras que yo estoy en Windows 7).

Finalmente, si ejecuto esto en Visual Studio y establezco algunos puntos de interrupción, entonces parece funcionar. Por lo tanto, no parece una falla lógica, sino algún tipo de problema de tiempo o contención.

preguntado el 03 de mayo de 12 a las 18:05

Recuerde que FindWindowEx busca en el GetWindowText cuerda, no la WM_GETTEXT valor. -

Spy ++ puede ser realmente útil para rastrear cosas como esta. -

Sí, leí esa otra publicación, pero lo que realmente me confunde es que funciona cuando hay puntos de interrupción establecidos. También investigaré la sugerencia del Sr. Chen. -

Entonces, al mirar en Spy ++, parece que el identificador de ventana del padre no es el mismo que el identificador que estoy imprimiendo en mi código. Interesante... Al menos eso me da algo para continuar. -

1 Respuestas

Mi problema resultó ser similar al de esta pregunta:

¿Por qué no puedo obtener el identificador de la ventana principal para un proceso iniciado?

Mi MainWindowHandle no estaba configurado en la ventana que esperaba que fuera (lo cual descubrí usando Spy ++, ¡gracias Rob P.!). Así que escribí un código usando EnumWindows para encontrar la ventana que estaba buscando (vea la respuesta de Joshua en la publicación vinculada) y luego usé ese identificador de ventana para pasar a FindWindowEx y todo funcionó como se esperaba.

contestado el 23 de mayo de 17 a las 12:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.