我们知道 DOS 下的批处理程序中,可以用 ECHO 显示一段信息(提示信息或出错信息),对于要接收用户输入的情况,MS-DOS 本身提供的外部程序就只有 CHOICE 能让用户输入一个键,所以基本上只能用于菜单选择。对于下述两个需求,那就只有另外编程序了: 1、在 DOS 下的批处理程序中通过 WINDOWS 对话框显示一段提示信息或出错信息 2、在 DOS 下的批处理程序中通过 WINDOWS 对话框接收用户输入的一个字符串,并对其进行后续处理
对于这两个问题,相信有些人已经有了一些解决方案。在此我提出我的解决方案,是用 DELPHI 写的程序(这些DELPHI程序都是没有 FORM 和.PAS文件的),我觉得比较简单,作为抛砖引玉。
1.1 显示提示信息 SHOWMSG.DPR program ShowMsg; uses Windows; {$R *.RES} begin if ParamCount < 2 then begin MessageBox(0, '用Windows对话框显示信息'#13#10+ '用法: ShowMsg 提示信息 对话框标题', '用法说明', MB_ICONINFORMATION); Halt; end; MessageBox(0, PChar(ParamStr(1)), Pchar(ParamStr(2)), MB_OK); Halt; end.
1.2 显示出错信息 EmsgDlg.DPR program EmsgDlg; uses Windows; {$R *.RES} begin if ParamCount < 2 then begin MessageBox(0, '用Windows对话框显示出错信息'#13#10+ '用法: EmsgDlg 出错信息 对话框标题', '用法说明', MB_ICONINFORMATION); Halt; end; MessageBox(0, PChar(ParamStr(1)), PChar(ParamStr(2)), mb_IconHand); Halt; end.
2. INPUTBOX.DPR: 通过 WINDOWS 对话框接收用户输入的一个字符串,并把用户输入作为调用一个批处理程序或其他程序的第1个参数 program INPUTBOX; uses Dialogs, Windows; {$R *.RES} var NewString: string; ClickedOK: Boolean; begin if ParamCount < 4 then begin MessageBox(0, '将用户输入作为.BAT或其他程序的参数调用'#13#10+ '用法: InputBox .BAT或其他程序文件名 缺省输入 对话框标题 提示信息', 'InputBox用法说明', MB_ICONINFORMATION); Halt; end; NewString := ParamStr(2); //default string ClickedOK := InputQuery(ParamStr(3), ParamStr(4), NewString); if ClickedOK then WinExec(PChar(ParamStr(1) + ' ' + NewString), SW_SHOWNORMAL); Halt; end.
用法举例: PRT.BAT文件内容: @ECHO OFF D:\POS\INPUTBOX.EXE PR30.BAT "99991231" "解压POS报表文件并用写字板打开入帐汇总表" "请输入日期:"
PR30.BAT文件内容: @ECHO OFF IF "%1"=="" GOTO END D: CD \POS\INBOX IF NOT EXIST POS%1.ARJ GOTO NOT_FOUND D:\POS\ARJ X -y POS%1.ARJ CD D:\POS\INBOX\pos_report IF NOT EXIST Pr30B%1.txt GOTO PR30_NOT_FOUND C:\WINDOWS\WRITE Pr30B%1.txt D:\POS\ShowMsg "成功!" "OK!!!" GOTO END
:NOT_FOUND D:\POS\EmsgDlg "文件D:\POS\INBOX\POS%1.ARJ找不到!" "出错!" CD D:\ GOTO END
:PR30_NOT_FOUND D:\POS\EmsgDlg "文件D:\POS\INBOX\pos_report\Pr30B%1.txt找不到!" "出错!" CD D:\ GOTO END
:END
注:上述 DELPHI 程序编译后,INPUTBOX.EXE大小是308KB,EMSGDLG.EXE 和 ShowMsg.exe大小都是 17KB,没有比较用 VC 或 BCB 来写的结果。但可以肯定,用 WIN32 汇编产生的 .EXE 最小,不过我没有仔细学过 WIN32 汇编。欢迎有兴趣的大侠比较一下或提出改进方法。 |
关键词: 通过DELPHI小程序在WINDOWS下更好地运用DOS批处理