Delphi 2010动态调用Windows程序

关键词:Delphi 2010,Winexec

       本人在使用Delphi 2010进行功能开发时,需要调用Windows程序,本人通过使用Winexec函数以实现本人要求。

1、问题

       本人在使用Winexec函数发现一个问题,就是Winexec(exePath,ShowCmd)命令中,exePath必须是固定的,无法通过变量传递。

即winexec支持下面命令:

       winexec('calc.exe',SW_show);

但不支持下面命令:

       Var filename:string;

       Filename:= 'calc.exe';

       Winexec(filename,SW_NORMAL) ;

2、处理过程

       通过变量传递方式,系统在编译时就会报错: E2010 Incompatible types: 'string' and 'PansiChar。把filename定义为pchar类型也是报同样错误。

       根据网上资料加上pchar函数(Winexec(pchar(filename),SW_NORMAL) ;),系统报错:Incompatible types: 'Char' and 'AnsiChar'。

       由此,本人判断是Delphi 2010与Delphi 7等有差异,故本人又使用函数pansichar、pansistring函数替代pchar,但还是不行。因为使用pansistring函数则是报错误信息Incompatible types: 'Char' and 'AnsiChar'。而使用pansichar函数、编译时系统不报错,但就是不执行命令行,通过调测发现经过pansichar函数转换后,命令行只保留了一个字符。

3、解决方案

        因此,本人只能采用变通方式达到本人目的。本将需要执行的文件命令放到一个固定位置、名称的批处理文件(.bat)文件中,Winexec函数中的filename变更为批处理文件名即可。

       在使用此方法时,本人发现一个问题,批处理文件的命令行中不能有空格,例如:目录‘…\RAD Studio\…’中有空格,该命令行将无法执行。

       因为,本文件为批处理文件,所以、本人在批文件中生成一组命令(先将目录切换到目标路径,在目录路径执行可执行文件)达到了此目标。

4、具体操作

       以执行delphi工具为例,具体实现方法如下:

1 添加memo控件,并设置visible=false;

2 编写代码,如下:

// step 1:参数定义

Filepath:='D:\SoftWare\Embarcadero\RAD Studio\7.0\bin';

filename:='bds.exe';

// step 2:生成批处理文件

Memo1.Lines.Clear;

Memo1.Lines.Add(copy(filepath,1,1)+':');   // 变更盘符

memo1.Lines.Add('cd '+ filepath);          // 进入目标文件目录

memo1.lines.add(filename);                 // 执行目标文件

memo1.lines.SaveToFile('C:\exec1.bat');

// step 3:执行批处理文件

winexec('C:\exec1.bat', SW_ show);

// step 4:删除批处理文件

deletefile('C:\exec1.bat');

       说明1 本人利用memo存放命令行,其好处在于其SaveToFile可以将memo的信息存放到目标文件中,不需要对文件执行打开、关闭等命令,比较简单;

      说明2 本例中,批处理文件的路径+文件名:'C:\exec1.bat';

      说明3 本例中,参数信息内容如下:

       Filepath:='D:\SoftWare\Embarcadero\RAD Studio\7.0\bin';

       filename:='bds.exe';

       说明4 本人通过一组dos命令行、实现文件执行操作,本例执行后,批处理文件中命令行信息示例如下(头两行命令是为了解决目录中存在空格而增加的,如果确认目录中没有空格,可以就用一个命令行即可,如:D:\SoftWare\Embarcadero\RADStudio\7.0\bin\bds.exe):

       D:

       cd D:\SoftWare\Embarcadero\RAD Studio\7.0\bin

       bds.exe

      本文目标,在delphi 2010环境下,通过中间文件(批处理文件)方式,实现在winexec中支持可变文件名(含文件目录、且支持目录中允许空格字符存在)的目的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值