FoxPro/Visual FoxPro - GENERAR EXE EN VFP9 NO VISUAL ( llamarlo modo DOS)

 
Vista:
Imágen de perfil de Jorge Gonzalez
Val: 28
Ha aumentado 1 puesto en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

GENERAR EXE EN VFP9 NO VISUAL ( llamarlo modo DOS)

Publicado por Jorge Gonzalez (15 intervenciones) el 09/05/2019 17:25:20
Estimados Junto en Saludarles: les comento; Se me presento el siguiente Dilema en una APLICACIÓN TIPO DEMONIO que tengo CORRIENDO en una maquina , contruido EN VISUAL FOXPRO 9.0 Y que lee varios archivos dbf en dbaseiv y clipper y tablas fox , una serie de combinaciones y como resultado me generas ciertos archvios planos , ES EN MODO GRAFICO se procesa cada 2 horas y esta app SIEMPRES ESTA CORRIENDO...

MI PROBLEMA ES LO SGTE: es solo un PRG que necesito compilar y solo enviarle 2 parámetros
tal cuaL como lo hago en el modo command en la ventana de la consola del VISUAL FOXPRO
DO <PROGRAMA.PRG> WITH 'parametro1' ,' parametro2' : ESTO FUNCIONA MUY BIEN....Pero necesito
compilarlo en MODO NO GRÁFICO...
Y EN DOS:

C:> PROGRAMA %1, %2

lA IDEA ES LLAMARLO DE OTRA APP como si llamara un exe externo hacia DOS , 2 parametros:

¿ alguien sabe como ..? , creo que no es necesario crear un proyecto o si !!!

LARGA VIDA AL ZORRO,!!!!

Saludos
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
1
Responder
sin imagen de perfil
Val: 1.011
Oro
Ha mantenido su posición en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

GENERAR EXE EN VFP9 NO VISUAL ( llamarlo modo DOS)

Publicado por Fidel José (657 intervenciones) el 10/05/2019 00:42:04
1) El main.prg del ejecutable que se llama, debe comenzar con
LPARAMETERS tcParam1, tcParam2

2) Utiliza la función Shell_Exec( ADDBS(lcPath)+Program_name , , lcParam1 + CHR(32) + lcParam2 )
* lcPath: Directorio de program_name
* Program_name: archivo exe que se necesita ejecutar (debe incluir la extensión)
* lcParam1: String
* lcParam2: String


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
PROCEDURE Shell_Exec
*--------------------------------------------
LPARAMETERS tcFileName, tcAction, tcParams,tlChangeDir
 
* tcFileName="\\ruta\nombreArchivo.extensión
* tcAction: "open", "find","print"   (por defecto es "open")
* tcParams: lista de parámetros separados por CHR(32) (unicamente para archivos exe)
* Sample Shell_Exec(m.lcFileName)

TRY 
	LOCAL lcExt,;
		lcMessage,;
		lDoit,;
		lcFolder,;
		loFso as Object,;
		loex AS Exception,;
		loResp AS Object

	lcFolder = FULLPATH("")
	loFso = NEWOBJECT("Scripting.FileSystemObject")
	
	loResp = NEWOBJECT("Empty")
	ADDPROPERTY(loResp,"nResponse",0)
	ADDPROPERTY(loResp,"failure",.f.)
	ADDPROPERTY(loResp,"FileExist",loFso.FileExists(m.tcFileName) )
	
	IF loResp.FileExist
		
		tcAction = EVL(m.tcAction,"Open")
		tcparams = EVL(m.tcParams,"")
		lcExt = JustExt(m.tcFileName)
		IF m.tlChangeDir
			lcPath = JUSTPATH(m.tcFileName)
			IF !EMPTY(m.lcPath) AND lofso.FolderExists(ADDBS(m.lcpath))

				CD &lcPath
			ENDIF 
		ENDIF 

		DECLARE INTEGER ShellExecute IN SHELL32.dll INTEGER nWinHandle,;
			STRING cOperation,;
			STRING cFileName,;
			STRING cParameters,;
			STRING cDirectory,;
			INTEGER nShowWindow
		DECLARE INTEGER FindWindow IN WIN32API STRING cNull,;
			STRING cWinName


		loResp.nResponse = ShellExecute(FindWindow(0,_SCREEN.Caption),tcAction,tcFileName,tcParams,SYS(2023),1)
		DO CASE
			CASE loResp.nResponse = 2
				lcMessage = "Invalid path or filename. No existe el archivo"
			CASE loResp.nResponse=8
				lcMessage = "No hay suficiente memoria para realizar la acción solicitada"
			CASE loResp.nResponse=11
				lcMessage = "El archivo no es ejecutable o está corrompido"
			CASE loResp.nResponse=31
				* Aparentemente ocurre cuando no encuentra
				* una aplicación asociada
				lcMessage = "No se encuentra una aplicación para "+m.lcExt
				
			CASE loResp.nResponse=33
				* VErificado para XLS,DOC,JPG,BMP
			CASE loResp.nResponse=42
				* Verificado para PDF,GIF,0MDI,MIP,NRI
			OTHERWISE 
			
		ENDCASE
	ENDIF 
CATCH TO loex
	loex.UserValue = PROGRAM()
	ShowError(loex)
FINALLY
	loFso = null
	IF m.tlChangeDir
		CD &lcFolder
	ENDIF 
	IF !EMPTY(m.lcMessage)
		loResp.Failure = .t.
		Messagebox(m.lcMessage,0,program())
	ENDIF 
ENDTRY 
RETURN loResp
ENDPROC 

PROCEDURE ShowError
LPARAMETERS toExcep,tlNotShow,tcCaption
*--------------------------------------
tcCaption=EVL(tcCaption,MENSAJE_DE)
LOCAL lcMens
lcMens="Fecha "+TRANSFORM(DATETIME());
	+CHR(13)+"Mensaje: "+toExcep.message;
	+CHR(13)+"ErrorNo: "+TRANSFORM(toExcep.Errorno);
	+CHR(13)+"Llamada: "+toExcep.Uservalue
IF PEMSTATUS(toExcep,"lineno",5) AND VARTYPE(toExcep.lineno)="N"
	lcMens=lcMens+CHR(13)+"linea "+TRANSFORM(toExcep.lineno)
ENDIF
	
STRTOFILE(m.lcMens + CHR(13) + REPLICATE("=",80) + CHR(13) ,"TheoCall_Error.log",1)
 
IF !tlNotShow
	MESSAGEBOX("Se ha producido un error:"+CHR(13)+lcMens,0,m.tcCaption)
ENDIF
 
ENDPROC
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Jorge
Val: 28
Ha aumentado 1 puesto en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

GENERAR EXE EN VFP9 NO VISUAL ( llamarlo modo DOS)

Publicado por Jorge (15 intervenciones) el 10/05/2019 16:05:34
Estimado Fidel !!!
voy hacer las pruebas necesarias , Muchas Gracias Por su aporte estimado...
¿ Pregunta !!!no debería crea formulario ,.... solo debo crear un proyecto y agregar los 2 PRG , el mail.prg y el proceso.prg.... cierto !!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 1.011
Oro
Ha mantenido su posición en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

GENERAR EXE EN VFP9 NO VISUAL ( llamarlo modo DOS)

Publicado por Fidel José (657 intervenciones) el 11/05/2019 00:24:48
Para que no tenga ningún efecto visual, creas un proyecto al que solamente le agregas to main.prg con los procedure que necesites (el primer procedure no lleva la cláusula PROCEDURE, sino que directamente empieza con LPARAMETERS a,b,c
También en el project Manager, ficha Other, seccion Text Files, marca como incluído al config.fpw (por defecto trae SCREEN = OFF).
El programa se ejecutará sin mostrar nada.

Acá te dejo un ejemplo que armé para probar el envío anterior. El prg no hace nada, excepto mostrar unos messagebox() según el caso, de acuerdo a los parámetros pasados. Se importante el uso de ON SHUTDOWN con una rutina de cierre. Eso evita que la aplicación te quede colgada e invisible.
Al proyecto lo armé con el wizard. Agregué este main.prg, lo marqué como Set Main y luego puse el config.fpw como incluído. Y luego Build, generando un ejecutable (exe).

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
LPARAMETERS tcFolder_ini, tcProgram_Name
 
 
SET DEBUG OFF
SET SAFETY OFF
SET DATE TO BRITISH
SET CENTURY ON
SET DELETED ON
set BELL OFF
SET STATUS OFF
set STATUS BAR OFF
SET SCORE OFF
SET TALK OFF
SET NOTIFY OFF
SET NEAR OFF
SET ESCAPE OFF
SET UNIQUE OFF
SET FIXED OFF
SET EXACT OFF
SET CONF ON
SET FDOW TO 2
SET OLEOBJECT ON
SET LOGERRORS OFF
SET HOURS TO 24
 
ON SHUTDOWN do MyQuit
 
TRY
 
 
 
 
	LOCAL lcMessage,;
			lFailure,;
			lcFile_Path_Name,;
			loEx as Exception,;
			loFso as Object,;
			lnParameters
 
	lnParameters = PCOUNT()
 
	loFso = NEWOBJECT("Scripting.FileSystemObject")
 
	lcMessage = ""
 
 
	DO WHILE .t.
		IF VARTYPE(m.tcFolder_ini)#"C" OR EMPTY(m.tcFolder_ini)
			lcMessage = m.lcMessage ;
				+ IIF(EMPTY(m.lcMessage),"",CHR(13));
				+ "Parámetro 'Folder_Ini' incorrecto" + CHR(13);
				+ "Parámetros pasados = "+TRANSFORM(m.lnParameters)
			lFailure = .t.
		ENDIF
		IF VARTYPE(m.tcProgram_Name)#"C" OR EMPTY(m.tcProgram_Name)
			lcMessage = m.lcMessage ;
				+ IIF(EMPTY(m.lcMessage),"",CHR(13));
				+ "Parámetro 'Program_Name' incorrecto"	+ CHR(13);
				+ "Parámetros pasados = "+TRANSFORM(m.lnParameters)
			lFailure = .t.
		ENDIF
 
		IF m.lFailure
			EXIT
		ENDIF
 
		lcMessage = m.lcMessage ;
			+ IIF(EMPTY(m.lcMessage),"",CHR(13));
			+ "Folder_Ini: "+m.tcFolder_Ini + CHR(13);
			+ "Program_Name: "+m.tcProgram_Name
 
		lcFile_path_Name = ADDBS(m.tcFolder_Ini)+m.tcProgram_Name
 
		IF !loFso.FileExists(m.lcFile_Path_Name)
			lcMessage = m.lcMessage ;
				+ CHR(13);
				+ "No se encuentra el archivo m.lcFile_Path_Name"
			EXIT
		ENDIF
 
		lcMessage = m.lcMessage ;
			+ CHR(13) ;
			+ "Preparado para la acción"
		EXIT
	ENDDO
 
CATCH TO loex
	loex.UserValue = PROGRAM()
	ShowError(loex)
 
FINALLY
       loFso = null
	MESSAGEBOX(m.lcMessage,0,"Mensaje de PasPar")
	QUIT
ENDTRY
 
 
 
PROCEDURE myquit
*-----------------
*_screen.frmMain = null
CLEAR ALL
CLEAR EVENTS
ON SHUTDOWN
QUIT
 
ENDPROC
 
*--------------------------------------
PROCEDURE ShowError
LPARAMETERS toExcep,tlNotShow,tcCaption
*--------------------------------------
tcCaption=EVL(tcCaption,"Mensaje de PasPar")
LOCAL lcMens
lcMens="Fecha "+TRANSFORM(DATETIME());
	+CHR(13)+"Mensaje: "+toExcep.message;
	+CHR(13)+"ErrorNo: "+TRANSFORM(toExcep.Errorno);
	+CHR(13)+"Llamada: "+toExcep.Uservalue
IF PEMSTATUS(toExcep,"lineno",5) AND VARTYPE(toExcep.lineno)="N"
	lcMens=lcMens+CHR(13)+"linea "+TRANSFORM(toExcep.lineno)
ENDIF
 
STRTOFILE(m.lcMens + CHR(13) + REPLICATE("=",80) + CHR(13) ,"TheoCall_Error.log",1)
 
IF !tlNotShow
	MESSAGEBOX("Se ha producido un error:"+CHR(13)+lcMens,0,m.tcCaption)
ENDIF
 
ENDPROC
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Jorge
Val: 28
Ha aumentado 1 puesto en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

GENERAR EXE EN VFP9 NO VISUAL ( llamarlo modo DOS)

Publicado por Jorge (15 intervenciones) el 13/05/2019 20:36:58
Fidel!!! Super...!!! hoy lo voy a retomar!!!

Ohiga estimado ... cuando me comentas ... .. "marca como incluído al config.fpw..."

esa parte ....yoo acceso con CTRL + J (Informacion del proyecto) Y voy a la (lengüeta o Pestaña ) Archivos y dejo con 'x' config.fpw
te refieres es esa parte ...!!! me imagino ...cierto , si es así ,, estoy bien...

Ok. en eso estoy .. te comento , como me vaa...

muchas gracias Fidel , ""LARGA VIDA AL ZORRO !!!

Te dejo mi correo personal si necesitas mano devuelta ...un gustazo y agradecido ...probare y te cuento
atte.
[email protected]
Chile
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar