启动新的应用程序
2008-03-08 12:45:46 来源:WEB开发网 闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧綊鏌熼梻瀵割槮缁炬儳缍婇弻鐔兼⒒鐎靛壊妲紒鐐劤缂嶅﹪寮婚悢鍏尖拻閻庨潧澹婂Σ顔剧磼閻愵剙鍔ょ紓宥咃躬瀵鎮㈤崗灏栨嫽闁诲酣娼ф竟濠偽i鍓х<闁诡垎鍐f寖闂佺娅曢幑鍥灳閺冨牆绀冩い蹇庣娴滈箖鏌ㄥ┑鍡欏嚬缂併劎绮妵鍕箳鐎n亞浠鹃梺闈涙搐鐎氫即鐛崶顒夋晬婵絾瀵ч幑鍥蓟閻斿摜鐟归柛顭戝枛椤牆顪冮妶搴′簼缂侇喗鎸搁悾鐑藉础閻愬秵妫冮崺鈧い鎺戝瀹撲礁鈹戦悩鎻掝伀缁惧彞绮欓弻娑氫沪閹规劕顥濋梺閫炲苯澧伴柟铏崌閿濈偛鈹戠€n€晠鏌嶆潪鎷屽厡闁汇倕鎳愮槐鎾存媴閸撴彃鍓卞銈嗗灦閻熲晛鐣烽妷褉鍋撻敐搴℃灍闁绘挻娲橀妵鍕箛闂堟稐绨肩紓浣藉煐濮樸劎妲愰幘璇茬闁冲搫鍊婚ˇ鏉库攽椤旂》宸ユい顓炲槻閻g兘骞掗幋鏃€鐎婚梺瑙勬儗閸樺€熲叺婵犵數濮烽弫鍛婃叏椤撱垹纾婚柟鍓х帛閳锋垶銇勯幒鍡椾壕缂備礁顦遍弫濠氱嵁閸℃稒鍊烽柛婵嗗椤旀劕鈹戦悜鍥╃У闁告挻鐟︽穱濠囨嚃閳哄啰锛滈梺褰掑亰閸欏骸鈻撳⿰鍫熺厸閻忕偟纭堕崑鎾诲箛娴e憡鍊梺纭呭亹鐞涖儵鍩€椤掑啫鐨洪柡浣圭墪閳规垿鎮欓弶鎴犱桓闂佸湱枪閹芥粎鍒掗弮鍫熷仺缂佸顕抽敃鍌涚厱闁哄洢鍔岄悘鐘绘煕閹般劌浜惧┑锛勫亼閸婃牠宕濋敃鈧…鍧楀焵椤掍胶绠剧€光偓婵犱線鍋楀┑顔硷龚濞咃絿妲愰幒鎳崇喓鎷犻懠鑸垫毐闂傚倷鑳舵灙婵炲鍏樺顐ゆ嫚瀹割喖娈ㄦ繝鐢靛У绾板秹寮查幓鎺濈唵閻犺櫣灏ㄥ銉р偓瑙勬尭濡繂顫忛搹鍦<婵☆垰鎼~宥囩磽娴i鍔嶉柟绋垮暱閻g兘骞嬮敃鈧粻濠氭偣閸パ冪骇鐎规挸绉撮—鍐Χ閸℃ê闉嶇紓浣割儐閸ㄥ墎绮嬪澶嬪€锋い鎺嶇瀵灝鈹戦埥鍡楃仯闁告鍕洸濡わ絽鍟崐鍨叏濡厧浜鹃悗姘炬嫹

核心提示:在for DOS的C语言中,有一个system()函数,启动新的应用程序,其功能是执行命令行程序,在VB中也有shell()函数,又不支持Windows NT,所以这里就不作介绍了,在Windows程序设计中WinAPI也为我们提供了类似的函数,它们就是WinExec()和ShellExecute()
在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帮助。
赞助商链接