关于DELPHI,调用EXE程序,并显示返回值
,可以在Delphi 的 memo 控件中显示返回的结果,如下:
NO DEVICE CONNECTED
请各位大神指导代码如何写,谢谢! 展开
Memo1.Text := RunDOS('cd C:\Program Files (x86)\Microchip');
Memo1.Text := RunDOS('ICD3CMD');
是这样用吗,报错了,“系统找不到指定文件”,错误指向了raise Exception.Create(SysErrorMessage(GetLastError));
大要看了一下没这样用的,大概应该就是
Memo1.Text := RunDOS('C:\Program Files (x86)\Microchip\MPLAB IDE\Programmer Utilities\ICD3\ICD3CMD.EXE -V -P -E -M -Y');
这里还有另外一种重定向输出输出的方法http://guanyue7613.blog.163.com/blog/static/8851474201325114242763/
就和在 命令行中直接输入CMD一样,按下回车,下面就会显示版本信息
现在就是想用Delphi做个软件,也可以完成这个功能,很多软件在调用的时候也需要加入一些设置指令,比如加一个: -H 什么的我查了一下,可以用 winexec()来调用其他的EXE程序,但是调用之后的返回值如何显示就不知道了
要得到这种控制台程序(类似DOS外部命令)的返回结果,总的来说要用到重定向。初级的方法是调用被调用的程序时,让被调用程序的输出重定向到一个文件,然后你的程序读取这个文件就行了。问题是WinExec调用程序时不支持被调用程序输出重定向。比如要得到CMD.exe /?的结果,可以在“命令提示符”窗口中输入命令行CMD.exe /? > R:\aa.txt后回车,结果就存到文件R:\aa.txt中了,而在Delphi中用
winexec('cmd.exe /? > R:\aa.txt',9);
却不行。解决方法是Delphi程序调用CMD程序,再利用CMD.exe的/C参数来调用你要调用的程序,这样你要调用的程序就在CMD程序的环境下运行,就可以利用重定向了。象这样
winexec('cmd.exe /C cmd.exe/?>r:\aa.txt',9);
这样就行了,这里当第二个cmd.exe就是你要调用的程序。但用winexec来调用,CMD的/C参数后面的参数不能有空格,如果你要调用的程序有多个参数要用空格分隔,就又不行了。改用ShellExecute来完成:
高级的方法另一位知友已给出,我就不说了。原理就是Delphi程序创建一个控制台环境(也就相当于CMD的环境),然后让你要调用的程序在这个控制台环境下运行,Delphi程序就能获得这个控制台环境下输出的东西。这种高级代码很难读得懂哦。