Ver la Versión Completa : [Sintaxis] Llamada a programas externos con rutas diferentes
orlando
18 de enero de 2025, 22:45
buena tarde
Alguien me da una mano tengo programas win10 que llaman a paint y excel ..pero
por ejemplo en paint seria cambia ruta y compilarlo con ruta de el usuario ej pepe ver archivo p
c:\users\pepe\AppData\Local\mspaint.exe D:\odog\0000000000001.bmp
pero
esto me llevaria a compilar por cada usuario....no se si alguien ya lo ha hecho .......pero
con una sola ruta...para dejar algo general y ahorrar trabajo-.............
por otro lado
tengo excel ver archivos e y e1.....pero no se como seria.....
pero ,,,no se dejaron subir solo archivo p
muy amables recibo ideas
Kuk
19 de enero de 2025, 02:09
@orlando, para qué indicas la ruta completa?
Estos programas siempre están en la variable de entorno PATH. Por consiguiente, no necesitas indicar la ruta, solo el nombre del programa.
---------- Post added at 02:09 ---------- Previous post was at 02:07 ----------
A las malas, podrías configurar un fichero plano que se lee por tu programa, donde en cada cliente indicarías la ruta, y ya está.
No sé para qué te complicas tanto ;)
orlando
19 de enero de 2025, 13:58
cordial saludo
el problema es que cuando ejecuto el programa en win 11 no funciona pero en win 10 si.....es por eso que de pronto
si tu o alguien me pudiera indicar ....que hacer ....envio 2 archivos de los errores en win 11
er1 y er2 y e y e1....que me faltaron en el post
pues por alguna razon no me permitio hacerlo
muy amable por su colaboracion
Kuk
19 de enero de 2025, 18:47
@orlando, ya te he respondido en mi post anterior, intenta llamar Excel y Paint sin ruta completa, solo por el nombre del EXE.
Si sigue sin funcionar (cosa que me extrañaría), crea un fichero nuevo de texto, y léelo cuando arranca tu programa, así tendrás la ruta de cada programa que te interesa en cada cliente, sin necesidad de recompilar el programa.
Meter parámetros en ficheros es lo típico, por qué no hacerlo también con tu problema.
Pruébalo y nos cuentas.
JCantero
19 de enero de 2025, 19:48
@orlando, prueba con esto.
Yo siempre lo hago asi. Usando start que ve la información en el registro y es independiente de la version de windows
para paint --> start mspaint.exe
para excel --> start excel
en tu caso:
start mspaint.exe D:\odog\0000000000001.bmp
orlando
19 de enero de 2025, 20:11
cordial saludo
ok lo hare con el start y les comento
muy amable por tu ayuda
Kuk
20 de enero de 2025, 00:23
@orlando, también tienes esta opción, que abrira cualquier fichero con su programa asociado en el SO: Abrir documento Word - COBOL Foro (https://www.cobolforo.es/showthread.php?t=477&p=2319)
orlando
20 de enero de 2025, 01:17
cordial saludo
intente con lo que me dice amigo jcantero....
en paint
me dice que falta como una declaracion ...no conozco bien la syntaxis
por lo cual le solicito una mano..
anexo 2 archivos intepaint y errorintepaint
ahora bien en excel
la verdad en esto me ayudo hace mucho tiempo...... el, amigo ROGER (Dios lo guarde) se definio un archivo de excel y se utilizo unas variables globales...
y hay unas funciones de movimiento en celdas conformando el archivo estas imagino quedarian y todo lo del archivo excel lo
descartaria anexo 2 archivos de principio y final de programa itexnicio y intexfin
a ver como podrian ayudar
muy amable toda su colaboracion
@JCantero,
Kuk
20 de enero de 2025, 09:40
@orlando, no peques fotos amigo, pega el código para que podamos leerlo bien. En las fotos no se ve nada.
Lo del START tienes que hacerlo así:
INVOKE POW-SELF "Execute" USING "start mspaint.exe D:\odog\0000000000001.bmp"
Lo mismo con lo que te he pasado yo:
INVOKE POW-SELF "Execute" USING 'rundll32 url.dll,FileProtocolHandler "D:\odog\0000000000001.bmp"'
orlando
20 de enero de 2025, 21:34
cordial saludo
para el caso de paint ya ensaye con invoke...mspaint no funciona
genera error de invalid calling of the method---
...aclaro para WIN 10 SI FUNCIONA
PARA WIN 11 NO ..
envio texto
*****modulo creacion*****
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
*estaba 01 RUTA PIC X(300) VALUE "C:\Windows\System32\MSPAINT.EXE D:\odog\0000000000000000000000001.bmp".
* 01 RUTA1 PIC X(300) VALUE "C:\WINDOWS\SYSTEM32\COMMAND.COM /C DEL D:\A-B-M\PRUEBA.TXT".
PROCEDURE DIVISION.
*estaba INVOKE POW-SELF "EXECUTE" USING RUTA.
INICIO.
INVOKE POW-SELF "EXECUTE" USING
"start mspaint.exe D:\odog\0000000000000000000000001.bmp"
INVOKE CMCOMMAND6 "SETFOCUS".
..
.................................................. .
******modulo consulta*****
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 COMPLETA GLOBAL EXTERNAL.
02 CON-Z PIC 99.
02 C-Z PIC 9(12).
02 NOM-Z PIC X(40).
02 CON-OZ PIC 99.
02 IF-OZ PIC 9.
02 ANO PIC 9999.
02 MESO PIC 99.
02 DIAO PIC 99.
01 SW99 GLOBAL EXTERNAL.
02 SWNN PIC 9.
01 RUTABUSCA.
*estaba 02 FILLER PIC X(40) VALUE "C:\Windows\System32\MSPAINT.EXE D:\odog".
02 COD-P-N PIC 9(12).
02 CONSECUTIVO-N PIC 99.
02 CONSE-ON PIC 99.
02 IF-ON PIC 9.
02 ANO-ON PIC 9999.
02 MES-ON PIC 99.
02 DIA-ON PIC 99.
02 FILLER PIC X VALUE ".".
02 FILLER PIC XXX VALUE "bmp".
* 01 RUTA1 PIC X(300) VALUE "C:\WINDOWS\SYSTEM32\COMMAND.COM /C DEL D:\A-B-M\PRUEBA.TXT".
PROCEDURE DIVISION.
IF SWNN = 0
MOVE ZEROS TO COD-P-N CONSECUTIVO-N CONSE-ON IF-ON
ANO-ON MES-ON DIA-ON
MOVE C-Z TO COD-P-N
MOVE CON-Z TO CONSECUTIVO-N
MOVE CON-OZ TO CONSE-ON
MOVE IF-OZ TO IF-ON
MOVE ANO TO ANO-ON
MOVE MESO TO MES-ON
MOVE DIAO TO DIA-ON
*estaba INVOKE POW-SELF "EXECUTE" USING RUTABUSCA.
INVOKE POW-SELF "EXECUTE" USING "start mspaint.exe D:\odog\RUTABUSCA"
MOVE 1 TO SWNN
IF SWNN = 1
INVOKE CMCOMMAND6 "SETFOCUS".
ACLARO * estaba era win 10 win 11 ....No funciona
para el caso de paint el rundll32.....no he probado....
ahora bien
para el caso EXCEL...ENVIO TEXTO ...COMO FUNCIONA WIN 10...
Podrias ayudarme para win 11...
envio texto
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT LEXCEL
ASSIGN TO "D:\EXCEL1\LPACIENTES.XLS"
ORGANIZATION IS LINE SEQUENTIAL.
DATA DIVISION.
FILE SECTION.
FD LEXCEL
LABEL RECORD IS STANDARD.
01 REC-LEXCEL PIC X(700).
WORKING-STORAGE SECTION.
01 EXCEL OBJECT REFERENCE COM IS GLOBAL.
01 WORKBOOK OBJECT REFERENCE COM IS GLOBAL.
01 COM-TRUE PIC 1(1) BIT VALUE B"1" IS GLOBAL.
01 APPLICATION PIC X(20) VALUE "EXCEL.APPLICATION" IS GLOBAL.
01 EXCEL_FILE PIC X(35) VALUE "D:\EXCEL1\LPACIENTES.XLS".
01 FECHA.
02 DIA PIC 99.
02 FILLER PIC X VALUE "/".
02 MES PIC 99.
02 FILLER PIC X VALUE "/".
02 ANO PIC 9999.
01 FECHAD.
02 ANOD PIC 99.
02 MESD PIC 99.
02 DIAD PIC 99.
01 ANODD PIC 9999 VALUE ZEROS.
01 ERRORA PIC 9.
01 FALLO PIC 9.
* 01 FECHA.
* 02 DIA PIC 99.
* 02 FILLER PIC X VALUE "/".
* 02 MES PIC 99.
* 02 FILLER PIC X VALUE "/".
* 02 FILLER PIC XX VALUE "20".
* 02 ANO PIC 99.
01 FIN-A PIC 9.
01 FIN-AA PIC 9.
01 FEC.
02 AA PIC 99.
02 MM PIC 99.
02 DD PIC 99.
01 L0.
02 PIC X(85) VALUE
"<HTLM><HEAD><TITLE>ABONOS DEL MES DE SEP.2018</TITLE></HEAD>".
01 L-1.
02 PIC X(6) VALUE "<BODY>".
02 PIC X(15) VALUE "<TR><TH><B> ".
02 L1-CIA PIC X(60) VALUE
"CONSULTORIO ODONTOLOGICO ".
02 PIC X(6) VALUE "<\B>".
01 L-11.
02 PIC X(15) VALUE "<TR><TH>".
02 PIC X(55) VALUE
"LISTA DE PACIENTES :".
02 FECHA-II PIC X(10).
01 L-30.
02 PIC X(7) VALUE "<TABLE>".
01 L-2.
02 PIC X(4) VALUE "<BR>".
02 L2-CIA PIC X(112) VALUE SPACES.
02 L3-MES PIC X(10).
02 L3-RMES REDEFINES L3-MES.
03 L3-DMES PIC BXXX.
03 L3-LET PIC XXX.
03 L3-HMES PIC XXX.
02 L3-ANO PIC Z9999.
01 GRUPO.
02 G1 PIC 999.
02 G2 PIC X(17).
01 L-3.
02 PIC X(4) VALUE "<BR>".
02 L3-CIA PIC X(32).
02 PIC X(7) VALUE " ".
02 L2-RFC PIC X(15) VALUE SPACES.
01 LLL.
02 PIC X(7) VALUE "<BR><U>".
02 L-0 PIC X(163) VALUE SPACES.
01 L-4.
02 PIC X(30) VALUE "<TR><TH><U> PACIENTE ".
02 PIC X(30) VALUE "<TH><U> TELEFONO ".
02 PIC X(30) VALUE "<TH><U> C.C o T.I ".
01 L-5.
02 PIC X(15) VALUE "<TR><TH> ".
02 PACIENTE-I PIC X(30) VALUE " ".
02 PIC X(4) VALUE "<TD>".
02 TELEFONO-I PIC X(14).
02 PIC X(4) VALUE "<TD>".
02 IDENTIDAD-I PIC X(14).
* 01 CAMINO.
* ** 02 CAM1 PIC X(40) VALUE "D:\EXCEL.EXE BALANZA.XLS".
01 ANO-X.
02 AA-N PIC 99.
02 BB-N PIC 99.
01 X-ANO REDEFINES ANO-X PIC 9(4).
01 TIPO PIC X.
01 CIA PIC X(15).
01 A1 PIC 99 VALUE 0.
01 K PIC 99 VALUE 0.
*
01 SW PIC 9.
01 CADENA PIC X(8).
01 RUTA PIC X(256).
01 REDD GLOBAL EXTERNAL.
02 RED PIC X(256).
PROCEDURE DIVISION.
INICIO.
OPEN OUTPUT LEXCEL CLOSE LEXCEL.
OPEN EXTEND LEXCEL.
RECIBE-FEC-ACTUAL.
MOVE ZEROS TO DIA MES ANO DIAD MESD ANOD ANODD
ACCEPT FECHAD
FROM DATE
MOVE DIAD TO DIA
MOVE MESD TO MES
IF
ANOD > 90
COMPUTE ANODD = 1900 + ANOD
MOVE ANODD TO ANO
ELSE
COMPUTE ANODD = 2000 + ANOD
MOVE ANODD TO ANO.
** * MOVE AA TO ANO.
* MOVE MM TO MES.
MOVE FECHA TO FECHA-II.
INSPECT L-0 REPLACING CHARACTERS BY " ".
INSPECT L0 REPLACING ALL " " BY " ".
INSPECT L-1 REPLACING ALL " " BY " ".
INSPECT L-11 REPLACING ALL " " BY " ".
INSPECT L-2 REPLACING ALL " " BY " ".
INSPECT L-3 REPLACING ALL " " BY " ".
* INSPECT L-30 REPLACING ALL " " BY " ".
INSPECT L-4 REPLACING ALL " " BY " ".
WRITE REC-LEXCEL FROM L0.
WRITE REC-LEXCEL FROM L-1.
WRITE REC-LEXCEL FROM L-3.
WRITE REC-LEXCEL FROM L-11.
* WRITE REC-LEXCEL FROM L-2.
WRITE REC-LEXCEL FROM L-3.
INSPECT L-0 REPLACING CHARACTERS BY " ".
WRITE REC-LEXCEL FROM LLL.
WRITE REC-LEXCEL FROM L-30.
* MOVE ANO TO ANO-A
* MOVE MES TO MES-A
* MOVE 0 TO DIA-A.
* WRITE REC-LEXCEL FROM L-4.
* WRITE REC-LEXCEL FROM L55.
* INICIO.
* MOVE SPACES TO RUTA.
* STRING RED DELIMITED BY SPACES
* "Artic.DAT" DELIMITED BY SIZE
* INTO RUTA.
* MOVE RUTA TO WF-ARTIC.
* PUSE DESDE ACA
ABRIR-A.
* OPEN INPUT ABONO.
OPEN INPUT PACIENTE-A.
PRINCIPAL.
MOVE 0 TO FIN-A FIN-AA SW
MOVE "A" TO NOMBRE-P
MOVE ALL ZEROS TO CODIGOP-KEY
PERFORM START-P
IF FALLO = 1
STOP RUN
ELSE
WRITE REC-LEXCEL FROM L-4
MOVE COD-P TO COD-A.
* PERFORM PROCESAR UNTIL FIN-A = 1.
* GO TO FIN.
*
PROCESAR.
PERFORM LEER-P
IF FIN-A = 1
GO FIN
ELSE
MOVE NOMBRE-P TO PACIENTE-I
MOVE TEL1-P TO TELEFONO-I
MOVE COD-P TO IDENTIDAD-I
WRITE REC-LEXCEL FROM L-5
GO PROCESAR.
LEER-P.
MOVE 0 TO FIN-A
READ PACIENTE-A
NEXT RECORD AT END
MOVE 1 TO FIN-A.
START-P.
MOVE 0 TO FALLO
START PACIENTE-A KEY NOT LESS NOMBRE-P
INVALID KEY
MOVE 1 TO FALLO.
*
FIN.
* CLOSE ABONO.
CLOSE PACIENTE-A.
CLOSE LEXCEL.
INVOKE COM "CREATE-OBJECT" USING APPLICATION RETURNING EXCEL.
INVOKE EXCEL "SET-VISIBLE" USING COM-TRUE.
INVOKE EXCEL "GET-WORKBOOKS" RETURNING WORKBOOK.
INVOKE WORKBOOK "Open" using EXCEL_FILE.
EXIT PROGRAM.
Kuk
20 de enero de 2025, 23:58
para el caso de paint el rundll32.....no he probado....
Pues pruébalo hombre, pruébalo, te aseguro que funciona, lo uso yo mucho. Ya verás como funciona. Y si sale error, eso es que tu cliente no tiene Excel o Paint instalados, que no es tu problema, que lo instale.
Insisto: no necesitas conocer la ruta de un programa instalado, porque normalmente está en la variable de entorno PATH! Pero bueno, con el ejemplo que te he enseñado, es el SO el que va a buscar el programa que abre el fichero, según la extensión del mismo.
Joseg
21 de enero de 2025, 10:57
Funciona en todos los Windows de 32/64 bits
Se abre con el programa asociado, no hay que preocuparse por la ruta.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 Wimagem.
03 pic x(8) value "..\DOCS".
03 pimagem pic x(200).
1 open-command.
2 filler pic x(4) value "open".
2 filler pic x(1) value low-value.
1 file-to-open.
2 FTOP pic x(256) value spaces.
2 filler pic x(1) value low-value.
1 default-directory.
* 2 filler pic x(17) value "D:\downloads\pdfs".
2 filler pic x(1) value low-value.
77 se-hInstance pic s9(9) comp-5.
77 ReturnValue pic s9(9) comp-5.
LINKAGE SECTION.
01 POW-ARG-PLISTITEM OBJECT REFERENCE POW-CLISTITEM.
PROCEDURE DIVISION USING POW-ARG-PLISTITEM.
*** To use this routine, the SHELL32.LIB file needs to be added
*** to the PowerCobol project.
MOVE "Text" OF CmText7 TO pimagem
MOVE Wimagem TO FTOP
call "ShellExecuteA" with stdcall linkage
using
by value 0 *> window handle
by reference
open-command *> operation to perform
file-to-open *> document to open
by value 0 *> parameters (none here)
by reference
default-directory, *> directory (could also be null)
by value 1 *> SW-SHOWNORMAL show the file when open
returning
se-hInstance *> not 'really' a handle,
*> more an error return
end-call
if se-hInstance is not greater than 32 then
INVOKE pow-self "DisplayMessage"
USING "Não consegue abrir o documento / NÃO ESTA SELECIONADO..." "Bad Open :(" POW-DMICONERROR
RETURNING ReturnValue
end-if
exit program
buena tarde
Alguien me da una mano tengo programas win10 que llaman a paint y excel ..pero
por ejemplo en paint seria cambia ruta y compilarlo con ruta de el usuario ej pepe ver archivo p
c:\users\pepe\AppData\Local\mspaint.exe D:\odog\0000000000001.bmp
pero
esto me llevaria a compilar por cada usuario....no se si alguien ya lo ha hecho .......pero
con una sola ruta...para dejar algo general y ahorrar trabajo-.............
por otro lado
tengo excel ver archivos e y e1.....pero no se como seria.....
pero ,,,no se dejaron subir solo archivo p
muy amables recibo ideas
vBulletin v3.8.7, Derechos ©2000-2026, Jelsoft Enterprises Ltd.