none
Cerrar popup por medio de código en aplicacion de consola. RRS feed

  • Pregunta

  • Buenas tardes, alguien me puede ayudar?

    Tengo una aplicación de consola que hace referencia a una dll. Dentro de esa dll tengo que correr un método que me arroja un popup y lo tengo que cerrar dando clic en el botón Aceptar.

    Como puedo hacer para que desde código, cierre ese popup en automático pero el problema es que cuando abre el popup mencionado, pierde el foco del código del sistema inicial y lo detiene, es decir, hasta que doy clic en aceptar, continua la secuencia de mi código.

    Alguien tendrá alguna sugerencia por favor?

    Gracias y saludos.

    miércoles, 10 de octubre de 2018 17:47

Respuestas

  • Gracias Leandro por tu pronta respuesta.

    Trate de hacer con un hilo como tu comentas pero como te decía, se detiene el código en la sentencia que abre el popup, no exactamente que pierda el foco. La manera en la que lo solucioné para que si alguien le ocurre lo mismo fue crear otra mini aplicacion de consola que busca la ventana y la cierra. Le puse un bucle infinito pero mas adelante enviaré por argumentos, una bandera en la que detenga dicho bucle.

    El código es este:

        class Program
        {
            [DllImport("user32.dll", SetLastError = true)]
            static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
            [DllImport("user32.dll")]
            public static extern int SendMessage(int hWnd, uint Msg, int wParam, int lParam);
            public const int WM_SYSCOMMAND = 0x0112;
            public const int SC_CLOSE = 0xF060;

            static void Main(string[] args)
            {
                while (true)
                {
                    IntPtr window = FindWindow(null, "Obtiene Firma en Panel");
                    if (window != IntPtr.Zero)
                    {
                        Console.WriteLine("Window found, closing...");

                        SendMessage((int)window, WM_SYSCOMMAND, SC_CLOSE, 0);
                    }
                }
            }
        }

    Gracias por sus atenciones. 

    Saludos.


    • Marcado como respuesta gbalejandro jueves, 11 de octubre de 2018 15:10
    jueves, 11 de octubre de 2018 15:10

Todas las respuestas

  • hola

    Cuando dices popup te refieres a que muestre un winform o es un MessageBox ?

    Habria que ver si este mensaje es modal o no, ya que si es modal puede que la eejcucion queda detenida alli hasta que el usuario la cierre, quizas la llamada a esa dll se deba realizar en un thread separado para no detener al de la consola y entonces si ver somo ejecutar un codigo que cierre la ventana

    >>pierde el foco del código del sistema inicial y lo detiene, es decir, hasta que doy clic en aceptar, continua la secuencia de mi código.

    entonces es modal, valida si puede lanzar esa funcionalidad en un thread separado

    saludis


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    jueves, 11 de octubre de 2018 13:39
  • Gracias Leandro por tu pronta respuesta.

    Trate de hacer con un hilo como tu comentas pero como te decía, se detiene el código en la sentencia que abre el popup, no exactamente que pierda el foco. La manera en la que lo solucioné para que si alguien le ocurre lo mismo fue crear otra mini aplicacion de consola que busca la ventana y la cierra. Le puse un bucle infinito pero mas adelante enviaré por argumentos, una bandera en la que detenga dicho bucle.

    El código es este:

        class Program
        {
            [DllImport("user32.dll", SetLastError = true)]
            static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
            [DllImport("user32.dll")]
            public static extern int SendMessage(int hWnd, uint Msg, int wParam, int lParam);
            public const int WM_SYSCOMMAND = 0x0112;
            public const int SC_CLOSE = 0xF060;

            static void Main(string[] args)
            {
                while (true)
                {
                    IntPtr window = FindWindow(null, "Obtiene Firma en Panel");
                    if (window != IntPtr.Zero)
                    {
                        Console.WriteLine("Window found, closing...");

                        SendMessage((int)window, WM_SYSCOMMAND, SC_CLOSE, 0);
                    }
                }
            }
        }

    Gracias por sus atenciones. 

    Saludos.


    • Marcado como respuesta gbalejandro jueves, 11 de octubre de 2018 15:10
    jueves, 11 de octubre de 2018 15:10