代替 VFP 的 RUN 命令的最好方法(VC6写的ShellExW.DLL,源程序ShellExW.CPP见我的主页)
ShellExW.CPP --- VC6 编译,生成一个供 VFP 等调用的 .DLL
代替 VFP 的 RUN 命令的最好方法:在 VFP 数据库应用程序设计中,经常需要调用一些以前在 MS-DOS 环境下运行的应用程序。这时候我们经常会想到 RUN 命令。利用 RUN 命令确实可以运行 MS-DOS 应用程序,但是却会跳出一个令人讨厌的黑屏幕。曾有人提出用 Win32 API 的 WinExec 来解决。但它和 RUN 命令一样也无法知道 MS-DOS 应用程序是否执行完成,无法取得 MS-DOS 应用程序的退出码(在 DOS 的 .BAT 中可用 IF ERRORLEVEL ... 检测)。使用本程序提供的函数ShellExecWait(),你可以运行 MS-DOS 应用程序或 Windows 应用程序直到其结束并取得其退出码,可以控制窗口是否显示和显示模式。
执行一个外部程序直到结束,返回结果码(0=ok)和外部程序退出码。
如果外部程序要使用输入输出重定向,请写一个 .BAT
外部程序执行时窗口是否显示和显示模式由n_ShowWinMode参数指定,参见 VC6的 WINUSER.H:
#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
VFP 调用举例:
DECLARE INTEGER ShellExecWait IN ShellExW.DLL ;
STRING lpProgName, STRING lpParms, ;
SHORT n_ShowWinMode, INTEGER @ExitCode
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
ShellExW.CPP --- VC6 编译,生成一个供 VFP 等调用的 .DLL
代替 VFP 的 RUN 命令的最好方法:在 VFP 数据库应用程序设计中,经常需要调用一些以前在 MS-DOS 环境下运行的应用程序。这时候我们经常会想到 RUN 命令。利用 RUN 命令确实可以运行 MS-DOS 应用程序,但是却会跳出一个令人讨厌的黑屏幕。曾有人提出用 Win32 API 的 WinExec 来解决。但它和 RUN 命令一样也无法知道 MS-DOS 应用程序是否执行完成,无法取得 MS-DOS 应用程序的退出码(在 DOS 的 .BAT 中可用 IF ERRORLEVEL ... 检测)。使用本程序提供的函数ShellExecWait(),你可以运行 MS-DOS 应用程序或 Windows 应用程序直到其结束并取得其退出码,可以控制窗口是否显示和显示模式。
执行一个外部程序直到结束,返回结果码(0=ok)和外部程序退出码。
如果外部程序要使用输入输出重定向,请写一个 .BAT
外部程序执行时窗口是否显示和显示模式由n_ShowWinMode参数指定,参见 VC6的 WINUSER.H:
#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
VFP 调用举例:
DECLARE INTEGER ShellExecWait IN ShellExW.DLL ;
STRING lpProgName, STRING lpParms, ;
SHORT n_ShowWinMode, INTEGER @ExitCode
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