在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的帮助文档。