在Borland C++ Buider 6.0中调用可执行程序
IT商界
Borland C++ Builder 6.0(以下简称BCB6)是Borland公司新一代面向对象、可视化的快速应用程序开发环境。它几乎把所有的Windows API(应用程序接口)都封装成简单易用的构件(Component)。在BCB6中,程序员可以直接利用VCL(可视化构件库),快速高效地开发出美观、精巧的Windows应用程序。但是有时我们也需要直接用API编程。比如,当你想要你的主程序在运行过程中调用可执行程序。下面是笔者的几点编程心得。
调用可执行程序的方法
第一种(笔者强烈推荐):利用API函数shellexecute
例如:
HWND handle;
ShellExecute (handle,"open","jly.exe","6 12",NULL,SW_SHOWNORMAL);
它有六个参数,从左至右,依次是被调用程序的父窗口句柄、对调用程序的操作类型、被调用程序的路径、执行参数、默认文件夹、窗口显示方式。
上面例子的意思是,运行当前目录下的名称为“jly.exe”的可执行文件,以正常的方式操作它的窗口。当然你也可以给出被调用程序的全路径。它的执行参数有两个:“6”和“12”,这里要注意,多个执行参数中间要以参数隔开。注意,这个函数在启动被调用进程后就返回,不等待进程结束。
第二种:WinExec(带参数的命令行,窗口打开方式)
例如:
WinExec("jly.exe 6 12",SW_SHOWNORMAL)。这个函数已过时了。
第三种:API函数CreateProcess,要用到的参数太多,因此在这里不予推荐。
第四种:是笔者开发一个软件平台时用的。Runprogram()是笔者写的一个函数以供大家参考。
第一个参数为被调用程序名称,第二个参数为执行参数。
void runprogram(AnsiString file name,AnsiString parameter)
{
SHELLEXECUTEINFO x;
memset(&x,0,sizeof(x));
x.cbSize=sizeof(x);
x.lpVerb="open";
x.lpFile=filename.c_str();
x.lpParameters=parameter.c_str();
x.fMask=SEE_MASK_NOCLOSEP ROCESS;
x.nShow=SW_SHOWDEFAULT;
ShellExecuteEx(&x);
}
经过测试,调用成功。
当然在被调用的程序中,要有接受参数的语句。若被调用程序也是用BCB6编写的,则有下列方法可以采用:
首先,最简单的方法是调用 ParaStr( )函数。你可使用ParamCount( )函数来确定到底有多少个命令行参数传递给了被调用的程序。ParamStr需要一个整数参数并且返回一个AnsiString对象。若参数为0,ParamStr 将返回可执行文件的全路径。若参数为1,将返回程序名及第一个命令行参数。若参数为2,将返回第二个参数,依次类推。
一个实例来说明
新建一个Application Project,在主窗口上放置3个Label,将下面的代码添加到你的被调用程序中:
Label1->Caption=ParamStr(0);
Label2->Caption=ParamStr(1);
Label3->Caption=ParamStr(2);
再运行程序。一般应能看到类似字符串:
C:\CBUILDER\PROJECTS\PROJ ECT1.EXE,这是被调用程序的路径。另外,Label2、Label3的Caption分别为6和12。
如果你没传递参数到被调用程序,那么Label2和Label3是空字符串。
另外,你也可以从BCB6菜单中选择Run|Parameters。输入几个参数(6 12)再次运行被调用程序。你将看到Label1的Caption为:C:\CBUILDER\PROJECTS\PROJECT1.EXE,Label2、Label3的Caption分别为6和12。
在BCB6中,ParamStr函数对目录中的空格能智能判断。笔者曾经把生成的EXE文件拷贝到系统盘的Program Files目录下再运行它,你将会看到ParamStr(0)返回全路径,并包含空格。
如果读者想更详细地了解这些方法,可查阅MSDN和BCB6的帮助文档。