No perder el foco cmd al ejecutar VFP

555 views
Skip to first unread message

Mayo KC

unread,
Feb 10, 2015, 6:04:06 PM2/10/15
to publice...@googlegroups.com
Buen día

Quiero ejecutar un .exe en VFP desde una ventana de cmd en pantalla completa sin que se pierda el foco. Ya coloqué SCREEN = OFF en el config.fpw, pero aún así, a pesar de no mostrar nada en pantalla, al momento de correr el .exe la pantalla completa se minimiza. De igual manera aunque no sea pantalla completa, es decir, si esta la ventanita de cmd y ejecuto el .exe de VFP, se pierde el foco durante un instante.

¿Alguna idea? Gracias de antemano

Fernando D. Bozzo

unread,
Feb 10, 2015, 7:22:24 PM2/10/15
to publice...@googlegroups.com
Mayo:

Cualquier cosa que ejecutes desde la ventana de comandos transfiere el control al nuevo programa, por lo que el foco de la ventana se pierde hasta que el programa termine, ya que la ventana no puede seguir haciendo nada mientras.

¿Cuál es el problema?

Mayo KC

unread,
Feb 11, 2015, 11:01:25 AM2/11/15
to publice...@googlegroups.com
Hola Fernando, 

Tengo una aplicación de consola realizada en C# que al momento de ejecutarla desde la ventana de comandos no transfiere el control a ese .exe. Si estoy en un cmd de pantalla completa y ejecuto esa aplicación de consola de C# se ejecuta sin minimizar la pantalla. Quiero realizar lo mismo con una App de VFP pero siempre que se ejecuta se minimiza la pantalla, ese es el problema.

Gracias por tu respuesta.

Fernando D. Bozzo

unread,
Feb 11, 2015, 11:14:50 AM2/11/15
to publice...@googlegroups.com
No me queda claro: ¿Qué pantalla se minimiza? ¿la de comandos DOS? Ese no es el funcionamiento por defecto, tiene que haber algo que la esté minimizando por programa

Pero entonces no querés que pierda el foco o no querés que se minimice?

Mayo KC

unread,
Feb 11, 2015, 11:55:19 AM2/11/15
to publice...@googlegroups.com
Hola Fernando.
Me explico:
Tengo 2 escenarios en los que tengo que llamar al .exe en VFP, uno de ellos es desde un cmd en pantalla completa y otro sin pantalla completa.

Cuando ejecuto el .exe de VFP desde pantalla completa ésta se minimiza, necesito que ésto no suceda.

Cuando ejecuto el .exe de VFP desde cmd sin pantalla completa ésta pierde el foco durante un breve instante (por esta razón se minimiza cuando lo ejecuto desde pantalla completa).

No quiero que pierda el foco durante ese breve instante porque es lo que hace que se minimice.

Muchas gracias por el tiempo y apoyo.

Fernando D. Bozzo

unread,
Feb 11, 2015, 1:35:06 PM2/11/15
to publice...@googlegroups.com
Hola Mayo:

Hice un EXE con VFP 9 con este programa compilado en un proyecto como "test_cmd.exe":

*-- main.prg
LPARAMETERS tcWindowType

tcWindowType    = UPPER(EVL(tcWindowType,'NORMAL'))

IF tcWindowType = "MAX" THEN
    ZOOM WINDOW SCREEN MAX        && Maximizo la ventana principal
ELSE
    ZOOM WINDOW SCREEN NORM        && Normalizo la ventana principal
ENDIF

LOCAL oFrm as Form
oFrm = CREATEOBJECT("frm")
oFrm.Show()
READ EVENTS
oFrm.Release()

IF _VFP.StartMode # 4 THEN
    RETURN
ENDIF

QUIT

DEFINE CLASS frm AS Form
    Height = 200
    Width = 300
    Autocenter = .T.

    ADD OBJECT cmdSalir AS Commandbutton WITH top=80, left=100, width=100, height=40, Caption="Cerrar"
   
    PROCEDURE cmdSalir.Click
        THISFORM.Hide()
        CLEAR EVENTS
    ENDPROC
   
    PROCEDURE QueryUnload
        THISFORM.Hide()
        CLEAR EVENTS
        NODEFAULT
    ENDPROC
ENDDEFINE


Para reproducir el proyecto y el EXE podés hacerlo con esto, desde la ventana de comandos de Fox:
BUILD PROJECT test_cmd FROM main.prg
BUILD EXE test_cmd FROM test_cmd RECOMPILE


Prueba 1:
Abrí una ventana de comandos normal de Windows 7, y ejecuté el "test_cmd.exe", que mostró la ventana principal de VFP a tamaño normal con un form centrado dentro y un botón "Salir".
=> La ventana de comandos desde la que lancé el EXE no se minimizó, pero obviamente el EXE aparece encima.

Prueba 2:
Abrí una ventana de comandos normal de Windows 7, y ejecuté el "test_cmd.exe MAX", que mostró la ventana principal de VFP maximizada con un form centrado dentro y un botón "Salir".
=> La ventana de comandos desde la que lancé el EXE no se minimizó, pero obviamente el EXE aparece encima.

Prueba 3:
Abrí una ventana de comandos maximizada de Windows 7, y ejecuté el "test_cmd.exe", que mostró la ventana principal de VFP a tamaño normal con un form centrado dentro y un botón "Salir".
=> La ventana de comandos desde la que lancé el EXE no se minimizó, pero obviamente el EXE aparece encima.

Prueba 4:
Abrí una ventana de comandos maximizada de Windows 7, y ejecuté el "test_cmd.exe MAX", que mostró la ventana principal de VFP maximizada con un form centrado dentro y un botón "Salir".
=> La ventana de comandos desde la que lancé el EXE no se minimizó, pero obviamente el EXE aparece encima.


Resultados:
- En ninguna de las pruebas la ventana de comandos se minimizó, tanto con la ventana de comandos maximizada como normal, independientemente de que la ventana principal de Fox se haya ejecutado normal o maximizada

Tiene que ser algo de la forma en que tenés montado todo, porque no encuentro otra explicación.

Saludos.-

Mayo KC

unread,
Feb 11, 2015, 2:04:39 PM2/11/15
to publice...@googlegroups.com
Gracias por la respuesta.

La aplicación que necesito ejecutar en VFP no muestra pantalla ni procesos, es por eso que necesito que sea "silenciosa". Veo que en tus pruebas la realizaste desde una ventana maximizada en Windows 7, yo lo necesito hacer desde Windows XP en pantalla completa.

CMD Maximizado en Windows 7 = Puedes ver la barra de título que dice command prompt y los botones de minimizar, restaurar, cerrar.

CMD Pantalla completa en XP = Se activa desde Alt + Enter en una ventana CMD y no ves absolutamente nada que no sea el CMD, es decir, sólo puedes hacer dir, delete, etc...

Si desde CMD Pantalla completa en XP mando a llamar a tu .EXE, el CMD se minimiza y se muestra el EXE encima.

Si en el CONFIG.FPW le pongo SCREEN = OFF y hago la misma prueba, el CMD se minimiza pero ya no se muestra nada.

Si cambio el EXE para que cuando se ejecute se salga inmediatamente de igual manera el CMD se minimiza y no se muestra nada.

Espero darme a explicar, estoy viendo opciones de crear la aplicación con otro lenguaje que si soporten el modo "consola".

Gracias por el apoyo y el tiempo de las pruebas.

Fernando D. Bozzo

unread,
Feb 11, 2015, 2:59:25 PM2/11/15
to publice...@googlegroups.com
Ah, no tengo XP, así que no puedo probar eso.

Saludos.-


Mario López

unread,
Feb 11, 2015, 3:49:28 PM2/11/15
to publice...@googlegroups.com
@Mayo: ¿y si en vez de crear un .EXE y llamarlo creás un servidor COM VFP y lo instanciás? Ahí no tendrías ninguna interface visible pero sí control completo del programa a ejecutar, pudiendo ejecutar métodos parametrizados y devolver resultados en vez de tener una simple línea de comandos.

Hace rato que no hago un server .COM, pero no era complicado, fijate en

https://msdn.microsoft.com/en-us/library/ms917477.aspx#vfpandcom_topic02 y
http://fox.wikis.com/wc.dll?Wiki~COMComponentExample~WIN_COM_API

para empezar.

Mis 2 centavos,
Mario
---

Mayo KC

unread,
Feb 11, 2015, 5:52:56 PM2/11/15
to publice...@googlegroups.com
Muchas gracias Mario! esto me funcionó
Reply all
Reply to author
Forward
0 new messages