在for DOS的C语言中,有一个system()函数,其成果是执行呼吁行措施,在VB中也有shell()函数,在Windows措施设计中WinAPI也为我们提供了雷同的函数,它们就是WinExec()和ShellExecute(),下面就来接头一下这两个函数的用法。
1)WinExec()
函数原型: UINT WinExec(LPCSTR lpCmdLine,UINT uCmdShow);
参数说明:(激活的意思是能接管核心,即标题栏酿成蓝色)
lpCmdLine:以0末了的字符串,呼吁行参数。
uCmdShow:新的应用措施的运行方法。其取值如下:
SW_HIDE埋没
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等举办操纵。这样我们就可以设计有超等链接气势气魄的措施了。
在Form中然后安排两个Label,配置其属性为:
Name Caption
lbHomepage http://www.ccrun.com
lbEMail mailto:[email protected]
并把字体改为蓝色有下划线,然后别离在两个Label的Click事件中插手以下代码:
ShellExecute(Handle,"",lbHomepage.Caption,"","",SW_SHOWNORMAL);
ShellExecute(Handle,"",lbEMail.Caption,"","",SW_SHOWNORMAL);
OK!试试看,如何?够酷的吧!
从上面可看出,ShellExecute的成果要强得多,而且可以完全替代WinExec(),事实上,WinExec()也是为了和以前版本兼容而保存,所以,我们要只管利用ShellExecute()。其实在WinAPI中,尚有一个函数ShellExecuteEx() ,但其利用巨大,又不支持Windows NT,所以这里就不作先容了,有乐趣的可以自已查询WinAPI辅佐。