发信人: goodfrd(supervisor) 
整理人: hunter__fox(2002-03-16 21:48:54), 站内信件
 | 
 
 
【 在 zhouboy 的大作中提到:】
 :RUN 后面如何才能支持空格字符(路径中包含空格)?如何解决才能支持空格?
 :......
  
 看看我的部分程序吧。
 使用我的DLL 函数 ShellExecWait,你可以运行 DOS 程序或 WINDOWS 程序,
 可以取得 DOS 程序的退出码(以前在 DOS BAT程序中用 IF ERRORLEVEL ...
 检测),可以使运行程序窗口不可见,保证你启动的程序执行完成才继续运行
 VFP 程序.
 需要我的 DLL 文件者请来 EMAIL。
 
 * X_DOWNPE.PRG --- 从AS/400下载对帐文件, V1.0
 *   MLY  2000.12.01
 *======================================================================
 glSYSMENU = .F.
 gnDOSpgmShowWinMode = 0 && 0=窗口隐藏
 * 参见 VC6 的 WINUSER.H:
 */*
 * * ShowWindow() Commands
 * */
 *#define SW_HIDE             0
 *#define SW_SHOWNORMAL       1
 *#define SW_NORMAL           1
 *#define SW_SHOWMINIMIZED    2
 *#define SW_SHOWMAXIMIZED    3
 *#define SW_MAXIMIZE         3
 *#define SW_SHOWNOACTIVATE   4
 *#define SW_SHOW             5
 *#define SW_MINIMIZE         6
 *#define SW_SHOWMINNOACTIVE  7
 *#define SW_SHOWNA           8
 *#define SW_RESTORE          9
 *#define SW_SHOWDEFAULT      10
 *#define SW_FORCEMINIMIZE    11
 *#define SW_MAX              11
 
 CLOSE TABLES ALL
 DECLARE INTEGER ShellExecWait IN ShellExW.DLL ;
         STRING lpProgName, STRING lpParms, ;
         SHORT n_ShowWinMode, INTEGER @ExitCode
 CD DATA
 DO XX_DOWNPE
 CD ..
 CLOSE TABLES ALL
 glSYSMENU = .T.
 SET SKIP OF MENU _MSYSMENU .F.
 RETURN
 
 *============================================================
 PROCEDURE XX_DOWNPE
 gnExitCode = 0
 c_MSG_TIT = [从 AS/400 (] + gcAS400SYS + [) 下载对帐文件]
 IF MESSAGEBOX([是否继续?], 4+32+256, c_MSG_TIT) != 6
     RETURN
 ENDIF
 * 输入日期
 DO FORM I_1DATE WITH [下载对帐文件], [请输入需要下载的交易日期:], {}
 IF glSEL_CANCEL
     RETURN
 ENDIF
 c_SEL_DATE = DTOS(gdDATE1)
 * 检查是否已经下载
 USE T_PETSA.DBF
 LOCATE FOR 系统日期 = VAL(c_SEL_DATE)
 IF FOUND()
     =MSG_INF("今天 ("+c_SEL_DATE+") PETSA 已经下载!", "!!!")
     USE
     RETURN
 ENDIF
 USE
 WAIT WINDOW NOWAIT "正在生成下载对帐文件的 .TTO 文件 ..."
 *......
 WAIT WINDOW NOWAIT "正在下载 PETSA ..."
 IF DOWNLOAD_AS400PF("PETSA.TTO", "PETSA") < 0
     RETURN -1
 ENDIF
 *PETSA(BIN)转换成 TXT
 rc = ShellExecWait("..\PF400CVT.EXE"+CHR(0),"1 PETSA.BIN PETSA.FFD PETSA.CSV 2"+CHR(0),;
                    gnDOSpgmShowWinMode, @gnExitCode)
 *出错处理
 IF rc != 0
     =MSG_ERR("转换 PETSA 出错! 出错码:"+ALLTRIM(STR(rc)))
     RETURN
 ENDIF
 IF gnExitCode != 0
     =MSG_ERR("转换 PETSA 出错! PF400CVT 退出码:"+ALLTRIM(STR(gnExitCode)))
     RETURN
 ENDIF
 *.............
 *ARJ压缩
 rc = ShellExecWait("..\ARJ.EXE"+CHR(0),"A ..\ARJ\"+c_SEL_DATE+".ARJ"+;
               " ..\OUTPUT\"+c_SEL_DATE+"*.*"+CHR(0),;
               gnDOSpgmShowWinMode, @gnExitCode)
 *出错处理
 IF rc != 0
     =MSG_ERR("调用 ARJ 压缩出错! 出错码:"+ALLTRIM(STR(rc)))
     RETURN
 ENDIF
 IF gnExitCode != 0
     =MSG_ERR("ARJ 压缩出错! ARJ 退出码:"+ALLTRIM(STR(gnExitCode)))
     RETURN
 ENDIF
 *填发送Email参数
 SELECT 0
 USE T_S_MAIL.DBF
 APPEND BLANK
 REPLACE 交易日期 WITH VAL(c_SEL_DATE), SMTP WITH gcMailServer, ;
     SenderMail WITH gcSenderEmail, SenderName WITH gcUID+gcSenderName, ;
     Recipient WITH gcRecipient, Subject WITH gcSubject, ;
     BodyText WITH gcMessage, ;
     Attachment WITH "..\ARJ\"+c_SEL_DATE+".ARJ"
 USE
 WAIT WINDOW NOWAIT "从AS/400下载对帐文件,统计,生成文件,准备发送Email---OK!"
 RETURN
 
 *......
 
 *============================================================
 FUNCTION DOWNLOAD_AS400PF
 PARAMETERS c_TTO_FILE, c_PF_NAME
 * 从 AS/400 下载文件
 * 返回: 0   --- 无数据
 *       -52 --- 转换出错
 *       <0  --- 出错
 *       1   --- ok
 *!..\RTOPCB.EXE &c_TTO_FILE > TTO_OUT.TXT
 =DEL_FILE("TTO_OUT.TXT")
 rc = ShellExecWait("DOWN400.BAT"+CHR(0), c_TTO_FILE + " TTO_OUT.TXT"+CHR(0),;
                    gnDOSpgmShowWinMode, @gnExitCode)
 IF APPINF_TXT_TO_DBF("TTO_OUT.TXT", "T_APPINF.DBF", "行号", "信息", 80) < 0
     =MESSAGEBOX([将应用程序运行信息文本文件倒入 DBF 出错!],16, [出错!])
     RETURN -1
 ENDIF
 * 检查应用程序(CA400 上/下载文件)的错误信息
 SELECT 0
 USE T_APPINF.DBF
 rc = CHK_CA400_INFO_ERR()
 USE
 IF rc = 0
     =MESSAGEBOX([下载 ] + c_PF_NAME + [ 无数据!], 48, [???])
 ENDIF
 IF rc = -52
     =MESSAGEBOX([下载 ] + c_PF_NAME + [ 转换出错! 请检查!], 16, [出错!])
     RETURN rc
 ENDIF
 IF rc < 0
     =MESSAGEBOX([下载 ] + c_PF_NAME + [ 出错! 请检查!], 16, [出错!])
     USE T_APPINF.DBF
     KEYBOARD '{CTRL+F10}'
     BROWSE NOMODIFY NODELETE NOAPPEND NOMENU ;
         TITLE [下载 ] + c_PF_NAME + [的出错信息如下, 按Esc退出]
     USE
     RETURN rc
 ENDIF
 IF rc > 0
     =MESSAGEBOX([下载 ] + c_PF_NAME + [ OK!], 0, [OK!])
 ENDIF
 RETURN rc
 
 *============================================================
 FUNCTION APPINF_TXT_TO_DBF
 PARAMETERS TXT_FNAME, DBF_NAME, LINE_NO_FLD, TXT_FLD, WRAP_LEN
 * 将应用程序运行信息文本文件倒入 DBF
 FP = FOPEN(TXT_FNAME, 0)
 IF FP < 0
     RETURN -1
 ENDIF
 SELECT 0
 USE (DBF_NAME)
 ZAP
 I = 1
 DO WHILE .T.
     IF FEOF(FP)
         EXIT
     ENDIF
     cLine = FGETS(FP, WRAP_LEN)
     APPEND BLANK
     REPLACE &LINE_NO_FLD WITH I, &TXT_FLD WITH cLINE
     I = I + 1
 ENDDO
 =FCLOSE(FP)
 USE
 RETURN 0
 
 *============================================================
 FUNCTION CHK_CA400_INFO_ERR
 * 具体检查信息
 * 返回: 0   --- 无数据
 *       -52 --- 转换出错
 *       <0  --- 出错
 *       1   --- ok
 LOCATE FOR 'CWBTF0004 - No data was matched to the specified options' $ 信息
 IF FOUND()
     RETURN 0
 ENDIF
 LOCATE FOR 'CWBDB0052 - Error occurred during data conversion' $ 信息
 IF FOUND()
     RETURN -52
 ENDIF
 LOCATE FOR 'CWBTF' $ 信息 OR 'CWBDB' $ 信息 OR 'SQL' $ 信息
 IF FOUND()
     RETURN -1
 ENDIF
 LOCATE FOR 'Error' $ 信息 OR 'failed' $ 信息 OR 'not correct' $ 信息 OR 'Cause' $ 信息
 IF FOUND()
     RETURN -1
 ENDIF
 LOCATE FOR '错' $ 信息 OR '失败' $ 信息                    && CA/400 中文版
 IF FOUND()
     RETURN -1
 ENDIF
 RETURN 1
 
 *============================================================
 FUNCTION HZ_RTRIM
 PARAMETERS c_STR
 c_STR = TRIM(c_STR)
 DO WHILE .T.
     IF RIGHT(c_STR, 2) != " "
         EXIT
     ENDIF
     c_STR = SUBSTR(c_STR, 1, LEN(c_STR)-2)
     c_STR = TRIM(c_STR)
 ENDDO
 c_STR = TRIM(c_STR)
 RETURN c_STR
 
 *============================================================
 FUNCTION DEL_FILE
 PARAMETERS c_FILENAME
 IF FILE(c_FILENAME)
     ERASE (c_FILENAME)
 ENDIF
 RETURN 1
 
 *============================================================
 FUNCTION APPEND_FROM_CSV
 PARAMETERS c_FILENAME
 IF FILE(c_FILENAME)
     APPEND FROM (c_FILENAME) TYPE DELIMITED
 ENDIF
 RETURN 1
 
 *============================================================
 FUNCTION STOD
 PARAMETERS c_DATE
 c_DATE = ALLTRIM(c_DATE)
 c_DD = RIGHT(c_DATE, 2)
 c_MM = LEFT(RIGHT(c_DATE, 4), 2)
 c_YYYY = LEFT(RIGHT(c_DATE, 8), 4)
 RETURN CTOD(c_YYYY+[.]+c_MM+[.]+c_DD)
 
 *** End of program.
 
 
  ---- 欢迎光临良友程序库:
  
 
 http://mly363.363.net
 http://computeruser.go.163.com
 http://mylib.top263.net
 
 
 有大量的源程序提供, 涉及:
 DOS, 汇编, Fortran, C, VFP, Oracle, Netware, 网络, TCP/IP,
 VMS, HP3000, HP9000, MPE, HP-UX,
 AS/400, OS/400, UNIX, Virus, 图形图象处理
  | 
 
 
 |