delphi调用外部程序~~~~~~~~~~~~

delphi调用外部程序~~~~~~~~~~~~,第1张

方法一

uses WinProcs

……

begin

WinExec(......)

……

end.

和调用Pascal库函数没什么两样。

方法二

用ShellExecute更好,在USES段加入SHELLAPI,使用时如:

执行"c:\myapp\myapp.exe"参数为"-s"

ShellExecute(handle,'open','c:\myapp\myapp.exe','-s','',SW_SHOWNORMAL)

第一个参数为父窗口句柄;

第二个参数为打开方式(OPEN,PRINT两种);

第三个参数为执行文件全路径;

第四个参数为执行文件参数;

第五个参数为执行文件开始运行时的初始目录

第六个参数为为执行文件运行方式(SW_HIDE,SW_MAXIMIZE,SW_MINIMIZE,

SW_RESTORE,SW_SHOW,SW_SHOWDEFAULT,SW_SHOWMAXIMIZED,SW_SHOWMINIMIZED,

SW_SHOWMINNOACTIVE,SW_SHOWNA,SW_SHOWNOACTIVATE,SW_SHOWNORMAL)

具体请看帮助。另外,如果为字符串参数,其中包含变量或运算的必需用PCHAR()函数。

Delphi 启动外部程序,,推荐使用 ShellExecute ,不推荐winexec!

winexec是16位代码,,有时会被杀软误报。。;另外winexec不能指定默认目录,有时启动的外部程序会出错!

在使用,ShellExecute 启动外部程序的时候,,如果这个外部程序不是和你的程序在同一个目录里,一定要指定一下,默认目录。例如,你启动的是 c:\windows\2.exe ,加上他的默认目录,如下:

ShellExecute(Handle,'open','c:\windows\2.exe', nil, {这里写2.exe的默认目录}'c:\windows\', SW_NORMAL)

你的意思是不是,象你这样写,就是先启动hypmain.exe 完以后才启动的2.exe!你想在同一时间启动这两个程序!

其实你就直接写成如下的,,时间间隔也就是几毫秒而已:

procedure TForm1.XPButton2Click(Sender: TObject)

begin

if (suiedit1.Text='1234')and(suiedit2.Text='1234') then

begin

ShellExecute(self.Handle,'open','internet\hypmain.exe', nil, nil, SW_NORMAL)

ShellExecute(self.Handle,'open','c:\windows\2.exe ', nil, nil, SW_NORMAL)

end

else

begin

Showmessage('输入的用户名或密码错误!')

end

end

你调用的程序要连接数据库,我猜想那个数据库的配置文件是和你调用程序在同一个目录的。你双击运行这个程序的时候,当前目录已经是在那个程序下了,所以那个程序从当前目录读取配置文件是可以的。但当是用程序调用的时候,当前目录没有指到那个程序的主目录下。所以被调用的程序找不到配置文件,就出现数据库连接错误了。解决的办法,可以修改那被调用的程序。或是把被调用的程序的路径加到环境变量path中。也可以用shellExecute调用,加上初始目录试试。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8164500.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-14
下一篇 2023-04-14

发表评论

登录后才能评论

评论列表(0条)

保存