如何在C++BUilder里面调用外部程序 转

在for DOS的C语言中,有一个system()函数,其功能是执行命令行程序,在Windows程序设计中WinAPI也为咱们提供了相似的函数,它们就是WinExec()和ShellExecute(),下面就来讨论一下这两个函数的用法。    html

   

 1)WinExec()   函数原型:  shell

   

 UINT   WinExec(LPCSTR   lpCmdLine,UINT   uCmdShow);    函数

   

 参数说明:(激活的意思是能接受焦点,即标题栏变成蓝色)    字体

   

 lpCmdLine:以0结尾的字符串,命令行参数。  命令行

   

 uCmdShow:新的应用程序的运行方式。其取值以下:    设计

   

 SW_HIDE   隐藏    htm

   

 SW_MAXIMIZE   最大化    事件

   

 SW_MINIMIZE   最小化,并把Z   order顺序在此窗口以后(即窗口下一层)的窗口激活    内存

   

 SW_RESTORE   激活窗口并还原为初始化大小   SW_SHOW   以当前大小和状态激活窗口    资源

   

 SW_SHOWDEFAULT   以默认方式运行  

   

 SW_SHOWMAXIMIZED   激活窗口并最大化    

   

 SW_SHOWMINIMIZED   激活窗口并最小化    

   

 SW_SHOWMINNOACTIVE   最小化但不改变当前激活的窗口    

   

 SW_SHOWNA   以当前状态显示窗口但不改变当前激活的窗口    

   

 SW_SHOWNOACTIVATE   以初始化大小显示窗口但不改变当前激活的窗口    

   

 SW_SHOWNORMAL   激活并显示窗口,若是是最大(小)化,窗口将会还原。第一次运行程序   时应该使用这个值    

   

 好比说,我想要用记事本打开"C:HDC.TXT",以正常方式运行:    

   

 WinExec("notepad   c:\hdc.txt",SW_SHOWNORMAL);    

   

 若是调用成功,这个函数会返回一个不小于31的值,不然调用失败,其返回值的意义以下:    

   

 0   系统内存或资源不足    

   

 ERROR_BAD_FORMAT   .EXE文件格式无效(好比不是32位应用程序)    

   

 ERROR_FILE_NOT_FOUND   指定的文件设有找到  

   

 ERROR_PATH_NOT_FOUND   指定的路径没有找到    

   

 这个函数和system()很是相似,只能运行.EXE文件,这样在WINDOWS中有它不尽人意的地方,好比不能用此方法经过关联的方法打开文件,例如WinExec("1.html",SW_SHOWNA);就不能打开此文档。  

   

 2)ShellExecute()    

   

 函数原型:  

   

 HINSTANCE   ShellExecute(   HWND   hwnd,   LPCTSTR   lpOperation,   LPCTSTR   lpFile,   LPCTSTR   lpParameters,   LPCTSTR   lpDirectory,   INT   nShowCmd   );  

   

 参数说明:    

   

 hwnd   窗口的句柄    

   

 lpOperation   进行的操做,如"open","print","explore"分别对应"打开","打印","游览",   也能够为空(""),此时表示进行默认的操做。    

   

 lpFile   要操做的文件。    

   

 lpParameters   若是lpFile指定的是一个可执行文件则表示参数    

   

 lpDirectory   操做进行的目录   nShowCmd   程序的运行方式,其取值见上例。  

   

 若是这个函数调用成功,将返回实例的句柄,若是不成功,返回值包含错误信息,因为类型比较多,这里就不一一列举了,详见WinApi的帮助。    

   

 这样,上面的例子就能够改变为(假设窗口的句柄为Handle)    

   

 ShellExecute(Handle,"open","notepad","c:\hdc.txt","",SW_SHOWNORMAL);    

   

 其实不用那么复杂,由于.TXT的关联程序就是记事本,因此只要这样就能够了    

   

 ShellExecute(Handle,"","c:\hdc.txt","","",SW_SHOWNORMAL);    

   

 这个函数和WIN9X中的命令行命令"start"相似,不光能够对文件进行操做,还能够对HTTP、MAILTO等进行操做。这样咱们就能够设计有超级连接风格的程序了。   例如在VB中,咱们首先声明此函数(可由VB自带的API游览器获得):    

   

 Public   Declare   Function   ShellExecute   Lib   "shell32.dll"   Alias   "ShellExecuteA"   (ByVal   hwnd   As   Long,   ByVal   lpOperation   As   String,   ByVal   lpFile   As   String,   ByVal   lpParameters   As   String,   ByVal   lpDirectory   As   String,   ByVal   nShowCmd   As   Long)   As   Long    

   

 而后放置两个Label,设置其属性为:    

   

 Name   lbHomepage   lbEMail   Caption   http://bcbtop.126.com   mailto:hugsnow@126.com    

   

 并把字体改成蓝色有下划线,而后分别在两个Label的Click事件中加入如下代码:    

   

 ShellExecute(Me.hWnd,"",lbHomepage.Caption,"","",SW_SHOWNORMAL);    

   

 ShellExecute(Me.hWnd,"",lbEMail.Caption,"","",SW_SHOWNORMAL);    

   

 从上面可看出,ShellExecute的功能要强得多,而且能够彻底替代WinExec(),事实上,WinExec()也是为了和之前版本兼容而保留,因此,咱们要尽可能使用ShellExecute()。    

相关文章
相关标签/搜索