手机站
网通分站
电信主站
密 码:
用户名:
当前位置 : 主页>程序设计>C/C++>列表

启动新的应用程式

来源:互联网 作者:west263.com 时间:2008-02-23
西部数码-全国虚拟主机10强!40余项虚拟主机管理功能,全国领先!双线多线虚拟主机南北访问畅通无阻!免费赠送企业邮局,.CN域名,自助建站480元起,免费试用7天,满意再付款! P4主机租用799元/月.月付免压金!
在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:ccrun.com@163.com

并把字体改为蓝色有下划线,然后分别在两个Label的Click事件中加入以下代码:
ShellExecute(Handle,"",lbHomepage.Caption,"","",SW_SHOWNORMAL);
ShellExecute(Handle,"",lbEMail.Caption,"","",SW_SHOWNORMAL);
OK!试试看,如何?够酷的吧!
从上面可看出,ShellExecute的功能要强得多,并且能够完全替代WinExec(),事实上,WinExec()也是为了和以前版本兼容而保留,所以,我们要尽量使用ShellExecute()。其实在WinAPI中,更有一个函数ShellExecuteEx() ,但其使用复杂,又不支持Windows NT,所以这里就不作介绍了,有兴趣的能够自已查询WinAPI帮助。




文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

热点关注
IDC资讯 虚拟主机 域名注册 托管租用 vps主机 智能建站
网站运营 建站经验 策划盈利 搜索优化 网站推广 免费资源
网站联盟 联盟新闻 联盟介绍 联盟点评 网赚技巧
行业资讯 业界动态 搜索引擎 网络游戏 门户动态 电子商务 广告传媒
网络编程 Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术 Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷 Internet Explorer
网页制作 FrontPages Dreamweaver Javascript css photoshop fireworks Flash
程序设计 Java技术 C/C++ VB delphi
网络知识 网络协议 网络安全 网络管理 组网方案 Cisco技术
操作系统 Win2000 WinXP Win2003 Mac OS Linux FreeBSD
返回首页 |关于我们 | 联系我们 | 付款方式 | 创业联盟 | 价格总览 | 资讯中心 | 友情链接 | 网站地图 | 招贤纳士 | RSS