Como ejecutar un comando de MS-DOS desde FOX

1,871 views
Skip to first unread message

acmc

unread,
May 26, 2014, 1:26:23 PM5/26/14
to publice...@googlegroups.com
Hola Foxeros..

Estoy tratando de incluir una funcionalidad a un sistema con otro programa de un tercero, este lee codigos QR desde la camara web y cuando lo lee muestra el resultado en la ventana de MS-DOS, si yo desde la linea de comando ejecuto ( zbar.exe >c:\pba\pba.txt ) el valor del código leido me lo manda al archivo pba.txt lo cual esta muy bien, yo lo que pretendo es que desde fox ejecutar dicho comando para luego leer el pba.txt para tomar los datos leidos.

Solo que no logro hacer que corra el comando... si utilizo el siguiente codigo..

WshShell.Run( lcCommand, 1, .T. )
lcCommand = ["C:\Program Files (x86)\ZBar\bin\zbarcam.exe"]
WshShell.Run( lcCommand, 1, .T. )

Si abre el programa perfectamente..pero ahí no guarda el resultado en el txt

Si cambio el codigo a :  lcCommand = ["C:\Program Files (x86)\ZBar\bin\zbarcam.exe " a ">c:\pba\pba.txt"]

Abre una ventana de ms-dos muy rapidamente y marca un error que no logro visualizar, es decir, la instrucción no se ejecuta, alguna sugerencia??

Salu2!!

GeoSys Diseño de Software

unread,
May 26, 2014, 2:07:21 PM5/26/14
to Comunidad de Visual Foxpro en Español
Prueba con RUN o !, puedes ver la ayuda...

Saludos
Anthony Contreras Peralta
Costa Rica.

Ariel

unread,
May 26, 2014, 2:23:15 PM5/26/14
to publice...@googlegroups.com
Podrias probar de cambiar la direccion donde se guarda, por ejemplo D:\, ya que el windows 7 es muy restrictivo con los programas que escriben en el C:\.
Y otra opción es hacer un .bat con esta rutina y ejecutar ese bat desde fox.


Ariel D'Alfeo
Córdoba Argentina

acmc

unread,
May 26, 2014, 4:30:25 PM5/26/14
to publice...@googlegroups.com
Anthony ..  Ya habia hecho pruebas con RUN y !  sin buenos resultados...

Ariel..  ya hice el bat pero no corre desde fox.. si le doy doble click desde el explorador de windows si se ejecuta :(

Edgar Acevedo

unread,
May 26, 2014, 5:12:39 PM5/26/14
to publicesvfoxpro
Primero, ¿El ejecutable se llama zbar.exe o zbarcam.exe?
Asumiendo... que se llama zbarcam.exe

Mi primera sugerencia sería que probaras este código:

OutRun("C:\Program Files (x86)\ZBar\bin\zbarcam.exe >c:\pba\pba.txt", 0)

IF FILE("c:\pba\pba.txt")
   ? "Se creo el archivo c:\pba\pba.txt"
ELSE
   ? "NO se pudo crear el archivo"
ENDIF

FUNCTION OutRun
   PARAMETERS M.NomExe, M.Visibi
   IF TYPE("M.Visibi") = "U"
      M.Visibi = 0
   ELSE
      IF TYPE("M.Visibi") = "C"
         M.Visibi = VAL(M.Visibi)
      ENDIF
   ENDIF
   #define SW_SHOW_INVISIBLE 0
   #define SW_SHOW_NORMAL 1
   #define SW_SHOW_MINIMIZED 2
   #define SW_SHOW_MAXIMIZED 3
   oShell = createobject("WScript.Shell")
   DO CASE
      CASE M.Visibi = 0
         oShell.Run(M.NomExe, SW_SHOW_INVISIBLE, .T. )   
      CASE M.Visibi = 1
         oShell.Run(M.NomExe, SW_SHOW_NORMAL, .T. )   
      CASE M.Visibi = 2
         oShell.Run(M.NomExe, SW_SHOW_MINIMIZED, .T. )   
      CASE M.Visibi = 3
         oShell.Run(M.NomExe, SW_SHOW_MAXIMIZED, .T. )   
   ENDCASE
   #undef SW_SHOW_INVISIBLE 
   #undef SW_SHOW_NORMAL 
   #undef SW_SHOW_MINIMIZED 
   #undef SW_SHOW_MAXIMIZED
RETURN .T.


Si lo anterior no te funciona, mi segunda opción sería esta:

? Ejecutar("zbarcam.exe", "open", "C:\Program Files (x86)\ZBar\bin", ">c:\pba\pba.txt", 2)

FUNCTION Ejecutar
   LPARAMETERS In_App, In_Action, In_Path, In_Params, In_Visual
   IF TYPE("In_Action") <> "C"
      In_Action = "open"
   ENDIF
   IF TYPE("In_Params") <> "C"
      In_Params = ""
   ENDIF
   IF TYPE("In_Path") <> "C"
      In_Path = ""
   ENDIF
   IF TYPE("In_Visual") <> "N"
      In_Visual = 1
   ENDIF
   DECLARE INTEGER ShellExecute IN shell32.DLL ;
                   INTEGER hndWin, ;
                   STRING cAction, ;
                   STRING cFileName, ;
                   STRING cParams, ;
                   STRING cDir, ;
                   INTEGER nShowWin
   M.ValRet = ShellExecute(0, In_Action, In_App, In_Params, In_Path, In_Visual)
   DO CASE
      CASE M.ValRet = 2
         M.ValMsg = "Mala Asociación de Archivo."
      CASE M.ValRet = 29
         M.ValMsg = "No se pudo cargar la Aplicación."
      CASE M.ValRet = 30
         M.ValMsg = "La Aplicación esta ocupada."
      CASE M.ValRet = 31
         M.ValMsg = "No hay Asociación de Aplicación"
      OTHERWISE
         M.ValMsg = "OK"
   ENDCASE
   CLEAR DLLS "ShellExecute"
RETURN M.ValMsg




Saludos y suerte,   Edgar Acevedo




El 26 de mayo de 2014, 11:26, acmc <impre...@gmail.com> escribió:

Víctor Hugo Espínola Domínguez

unread,
May 26, 2014, 5:36:13 PM5/26/14
to publice...@googlegroups.com
Hola acmc

Prueba generando previamente un .bat:

WshShell = Createobject("WScript.Shell")
= Strtofile(["C:\Program Files (x86)\ZBar\bin\zbarcam.exe" a > c:\pba\pba.txt], "BatTmp.bat")
WshShell.Run( "BatTmp.bat", 0, .T. )
Erase BatTmp.bat

Saludos,
Víctor.
Lambaré - Paraguay.

acmc

unread,
May 27, 2014, 11:02:54 AM5/27/14
to publice...@googlegroups.com
Gracias Edgar por tus sugerencias.. voy a probar y luego cuento como me fue!!

acmc

unread,
May 27, 2014, 11:03:39 AM5/27/14
to publice...@googlegroups.com
Gracias Victor Hugo.. voy hacer la prueba, espero funcione!!

helman alejandro garces chica

unread,
May 29, 2014, 10:03:03 PM5/29/14
to publice...@googlegroups.com
Hola a todos los foxeros 

de tanto leer documentos y manuales de la web encontre este codigo sencillo pero efectivo

RUN /n "c:\carpeta_de_la_aplicacion\tu_archivo.bat" /s

este codigo lo pones en un boton y funciona muy bien espero te sirva y lo puede poner en un messagebox para que el usuario le de clic en si ya lo personaliza como quiera

Saludos desde Medellin Colombia

helman alejandro garces chica

unread,
May 29, 2014, 10:04:20 PM5/29/14
to publice...@googlegroups.com
Recuerde porner el tu_archivo.bat en la carpeta de la aplicacion y listo
Reply all
Reply to author
Forward
0 new messages