作者:ShowMan 時(shí)間:2001-09-27 09:46 出處:互聯(lián)網(wǎng) 責(zé)編:chinaitpower
摘要:介紹一個(gè)功能強(qiáng)大的API函數(shù)ShellExecute
介紹一個(gè)功能強(qiáng)大的API函數(shù) ShellExecute
編譯
趙湘寧問(wèn)題的提出:
我使用MFC編寫一個(gè)APP,要求About對(duì)話框中顯示LOGO、公司名、地址和公司的URL鏈接。使用戶點(diǎn)擊URL鏈接以后,啟動(dòng)瀏覽器訪問(wèn)Web頁(yè)面,這種對(duì)話框中的熱鏈接使應(yīng)用
程序增色不少。我琢磨的方法是從
系統(tǒng)注冊(cè)表中通過(guò)查找.htm 或 .html
文件的關(guān)聯(lián)
程序來(lái)獲得缺省瀏覽器的名字,這樣好象有很多工作要做。此外,如果瀏覽器已經(jīng)打開,總是開始一個(gè)新的實(shí)例替代當(dāng)前已有的一個(gè)實(shí)例。想找一個(gè)容易一點(diǎn)的方法,但我查過(guò)有關(guān)的資料,沒有收獲,請(qǐng)高手指教。
解決方法:
如果有這樣的一個(gè)API函數(shù)該多好:OpenThisHereURLForMeNowPlease(),問(wèn)題不就解決了??!我告訴你吧,有,但它不是你所想象的那個(gè)函數(shù)。到目前為止,有關(guān)文檔中還沒有提到過(guò)這么一個(gè)有用的函數(shù),它能打開桌面上的任何
文件,也能打開Internet URL。唯一我能找到的參考資料是在Microsoft® Access KnowledgeBase中很曖昧地提到過(guò)這個(gè)函數(shù)。
這個(gè)不可思議的函數(shù)就是:ShellExecute,取代了WinExec。你可以給它任何
文件的名字,它都能識(shí)別出來(lái)并打開它。例如:
ShellExecute(NULL,"open","iloveu.bmp",NULL,NULL,SW_SHOWNORMAL);
用缺省的位圖編輯器打開一個(gè)叫iloveu.bmp的位圖
文件,這個(gè)缺省的位圖編輯器可能是Microsoft Paint, Adobe Photoshop, 或者 Corel PhotoPaint。
有關(guān)ShellExecute的詳細(xì)用法信息自己去參考有關(guān)資料吧,重要的是你知道了這個(gè)函數(shù)能打開任何
文件,甚至是桌面和URL快捷方式( .ink或 .url)。ShellExecute解析
系統(tǒng)注冊(cè)表HKEY_CLASSES_ROOT中所有的內(nèi)容,判斷啟動(dòng)那一個(gè)執(zhí)行
程序,并且啟動(dòng)一個(gè)新的實(shí)例或使用DDE將
文件名連到一打開的實(shí)例。然后,ShellExecute 返回打開
文件的應(yīng)用的實(shí)例句柄。
更奇妙的是ShellExecute不僅能打開機(jī)器上的
文件,還能打開Internet的站點(diǎn)地址。例如:
ShellExecute(NULL, "open", "http://www.microsoft.com", NULL, NULL, SW_SHOWNORMAL);
這個(gè)代碼使你能訪問(wèn)
微軟的主頁(yè)。當(dāng)ShellExecute遇到
文件名前面的“http:”時(shí),可以判斷出要打開的
文件是Web
文件,隨之啟動(dòng)Internet Explorer 或者 Netscape Navigator 或者任何你使用的別的瀏覽器打開
文件。ShellExecute還能識(shí)別其它協(xié)議,象FTP、GOPHER。甚至識(shí)別“mailto”,如果
文件名指向“mailto:zxn@hq.cninfo.net”,它啟動(dòng)電子郵件
程序并打開一個(gè)待編輯的新郵件??傊琒hellExecute函數(shù)就是如此簡(jiǎn)單地打開磁盤
文件和Internet
文件。如果將第二個(gè)參數(shù)“OPEN”改為“PRINT”或者“EXPLORE”,ShellExecute將能打印
文件和打開
文件夾。ShellExecute還有一個(gè)擴(kuò)展函數(shù)ShellExecuteEx,所帶參數(shù)中有一個(gè)特殊的結(jié)構(gòu),功能更強(qiáng),它的用法參見有關(guān)文檔。
現(xiàn)在,你知道了ShellExecute的秘密,用它很容易增加一個(gè)鏈接到你的About對(duì)話框。不是嗎。:)