Duda al usar ShellExecute

2,246 views
Skip to first unread message

Edgar Acevedo

unread,
Feb 11, 2012, 3:54:44 AM2/11/12
to publice...@googlegroups.com, Edgar Acevedo
Respetables amigos:

Estoy utilizando ShellExecute para ejecutar en  programa  .EXE externo.  Todo sale bien, excepto por el comportamiento del comando:
Yo quisiera que mi programa que invoca al .EXE  "espere" a que dicho .EXE termine de ejecutarse.

Actualmente llama al .EXE, lo abre en una ventana aparte y lo deja ejecutándose y me devuelve el control a mi aplicación para seguir con otra cosa.  Lo que yo quisiera es que NO ME DEVUELVA el control hasta que dicho .EXE haya terminado de ejecutarse.

Gracias por su tiempo, salu2,



Edgar Acevedo

Richard Silva

unread,
Feb 11, 2012, 7:03:14 AM2/11/12
to Comunidad de Visual Foxpro en Español
Hola Edgar,

El código que se plantea en el siguiente enlace puede servirte:

http://support.microsoft.com/default.aspx?scid=http://support.microsoft.com:80/support/kb/articles/Q191/5/84.asp&NoWebContent=1

--
Espero te ayude,

Saludos

Richard Silva

unread,
Feb 11, 2012, 7:24:12 AM2/11/12
to Comunidad de Visual Foxpro en Español
En fox.wikis.com hay un código más simple:

"With WScript.Shell::Run(), external commands can be run much more
flexibly than from the VFP RUN (!) command. - ?lc

> Not only that but it allows for synchronous execution of DOS programs avoiding the common problem when doing a standard RUN with DOS that VFP does not wait and merrily continues.

#define SW_SHOW_NORMAL 1
#define SW_SHOW_MINIMIZED 2
#define SW_SHOW_MAXIMIZED 3
oShell = createobject("WScript.Shell")
oShell.Run( "notepad.exe", SW_SHOW_NORMAL, .T. )

"...

Enlace:

http://fox.wikis.com/wc.dll?Wiki~WindowsScriptingHost

--
Espero te ayude

Saludos


On 11 feb, 04:54, Edgar Acevedo <aperso...@gmail.com> wrote:

Edgar Acevedo

unread,
Feb 11, 2012, 2:51:11 PM2/11/12
to publice...@googlegroups.com
Mil gracias Richard...!!!!

Justo era lo que andaba buscando.  Para enriquecer un poco mas el asunto, yo quería ejecutar algo de manera "invisible", así que modifiqué tu ejemplo de la siguiente manera:

#define SW_SHOW_INVISIBLE 0
#define SW_SHOW_NORMAL 1
#define SW_SHOW_MINIMIZED 2
#define SW_SHOW_MAXIMIZED 3
oShell = createobject("WScript.Shell")
oShell.Run( "mirror.exe D:\SISTEMA  E:\BACKUP", SW_SHOW_INVISIBLE, .T. )

Para hacer una réplica exacta del directorio donde radica mi aplicación utilizo este programa gratis llamado MIRROR.EXE que te puedes bajar de la Web.  Te hace una sincronización "unidireccional".

Nuevamente, gracias....!!!


Edgar Acevedo

Marco Plaza

unread,
Feb 11, 2012, 5:09:31 PM2/11/12
to Comunidad de Visual Foxpro en Español
Buen dato gracias.. yo también necesitaba poder correr 'invisible' un
programa que uso para convertir pdfs..

Saludos.

Marco

On 11 feb, 15:51, Edgar Acevedo <aperso...@gmail.com> wrote:
> *Mil gracias Richard...!!!!*
>
> Justo era lo que andaba buscando.  Para enriquecer un poco mas el asunto,
> yo quería ejecutar algo de manera "invisible", así que modifiqué tu ejemplo
> de la siguiente manera:
>
> #define SW_SHOW_INVISIBLE 0
> #define SW_SHOW_NORMAL 1
> #define SW_SHOW_MINIMIZED 2
> #define SW_SHOW_MAXIMIZED 3
> oShell = createobject("WScript.Shell")
> oShell.Run( "mirror.exe D:\SISTEMA  E:\BACKUP", SW_SHOW_INVISIBLE, .T. )
>
> Para hacer una réplica exacta del directorio donde radica mi aplicación
> utilizo este programa gratis llamado MIRROR.EXE que te puedes bajar de la
> Web.  Te hace una sincronización "unidireccional".
>
> Nuevamente, gracias....!!!
>
> Edgar Acevedo
>

Alfonso Arias Lemas

unread,
Feb 11, 2012, 5:30:00 PM2/11/12
to publice...@googlegroups.com
Porque no utilizas el comando RUN:
 
RUN /0 <programa>
 
con el valor cero espera a que temine el programa llamado para continuar com la aplicación ademas de poder tomar los siguientes valores la ventana del programa llamado.
 
Valor
Atributos de la aplicación
 
1 Activa y tamaño normal
2 Activa y minimizada
3 Activa y maximizada
4 Inactiva y tamaño normal
7 Inactiva y minimizada
 
 
Saludos,
  Alfonso
 

Carlos Coronel - CAC Grupo Centrosoft

unread,
Feb 11, 2012, 6:02:32 PM2/11/12
to publice...@googlegroups.com

Hola, prueba esto a mi me ha funcionado ..

 

WAIT WINDOW AT 12, 32 NOWAIT 'Un momento por favor...'

#define SW_SHOW_HIDDEN 0

 #define SW_SHOW_NORMAL 1

 #define SW_SHOW_MINIMIZED 2  

 #define SW_SHOW_MAXIMIZED 3

 oShell = CreateObject("WScript.Shell")

 oShell.Run("openfles0.EXE", SW_SHOW_HIDDEN, .T.)

RETURN

ENDPROC

 

 

PD: Fuente Portalfox…

Saludos…..

 

Ing. Carlos A. Coronel

Investigación y Desarrollo

CAC Grupo Centrosoft

Cel. 321-4763167 - 318-8876147

Jesus Caro V

unread,
Mar 30, 2015, 10:21:37 PM3/30/15
to publice...@googlegroups.com
¿Qué tal Carlos? Gracias por tu aporte.

Sucede que al ejecutar una liga de Internet el navegador siempre se abre independientemente del parámetro HIDDEN, ¿siempre es así o hay que especificar algo más?

Saludos.

Carlos Molina

unread,
Jul 6, 2017, 5:37:39 PM7/6/17
to Comunidad de Visual Foxpro en Español
Hola Marco, yo también necesito convertir pdf's solo a txt y uso el textextract exe (es el exe del programa PDF2Text Pilot), pero necesito pasarle parámetros como el nombre del pdf y el nombre del txt destino.
La linea de comando seria:

oComando="textextract ..\recibos\rec.pdf /to ..\recibos\rec.txt" 

Si ejecuto esta sentencia desde el cmd (dos), trabaja perfecto y crea el txt, pero si lo hago desde el fox:
run /N oComando, no tira ningún error pero no genera el archivo convertido a txt

Si lo hago de otra manera:

#define SW_SHOW_HIDDEN 0 
oShell = CreateObject("WScript.Shell") 
oShell.Run(cComando, SW_SHOW_HIDDEN, .T.) 
TEMP=INKEY(1)

El mismo resultado, NADA

Tendrías idea de como ayudarme?, estoy haciendo una aplicación que valida los pdf y la única manera de saber que es lo que tienen adentro es convirtiéndolo a txt.
Desde ya muchas gracias!!!!
Reply all
Reply to author
Forward
0 new messages