程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> 啟動新的應用程序

啟動新的應用程序

編輯:關於C++

在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幫助。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved