三個(gè)SDK函數(shù): WinExec,ShellExecute ,CreateProcess可以實(shí)現(xiàn)調(diào)用其他程序的要求,其中以WinExec最為簡單,ShellExecute比WinExec靈活一些,CreateProcess最為復(fù)雜。
          ??? WinExec 兩個(gè)參數(shù),前一個(gè)指定路徑,后一個(gè)指定顯示方式。
          ??? ShellExecute 可以指定工作目錄,并且還可以尋找文件的關(guān)聯(lián)直接打開不用加載與文件關(guān)聯(lián)的應(yīng)用程序,ShellExecute還可以打開網(wǎng)頁,啟動(dòng)相應(yīng)的郵件關(guān)聯(lián)發(fā)送郵件等等。
          ??? CreateProcess 一共有十個(gè)參數(shù),不過大部分都可以用NULL代替,它可以指定進(jìn)程的安全屬性,繼承信息,類的優(yōu)先級(jí)等等。如果我們要得到足夠多的關(guān)于新的進(jìn)程的信息,控制新的進(jìn)程的細(xì)節(jié)屬性,若要達(dá)到這些目的,我們就需要使用CreateProcess函數(shù)了。

          三個(gè)SDK函數(shù)( WinExec、ShellExec、CrateProcess )的語法:


          WinExec

          這個(gè)函數(shù)最簡單,只有兩個(gè)參數(shù),原型如下:


          ????? UINT WinExec(

          ????? LPCSTR lpCmdLine,?? // 命令路徑

          ????? UINT uCmdShow????? // 顯示方式

          ????? ;

          使用方法如下:

          WinExec("Notepad.exe", SW_SHOW); // 打開記事本
          WinExec("D:\\Program Files\\Test\\Test.exe",SW_SHOWMAXIMIZED); // 以最大化的方式打開Test.exe
          需要注意的是若用 SW_SHOWMAXMIZED 方式去加載一個(gè)無最大化按鈕的程序,譬如Neterm,Calc 等等,就不會(huì)出現(xiàn)正常的 窗體,但是已經(jīng)被加到任務(wù)列表里了。


          ShellExecute

          原型如下:

          ????? HINSTANCE ShellExecute(

          ????? HWND hwnd,?????????? //父窗口句柄

          ????? LPCTSTR lpOperation,?? //操作, 打開方式 "edit","explore","open","find","print","NULL"

          ????? LPCTSTR lpFile,???????? //文件名,前面可加路徑

          ????? LPCTSTR lpParameters,?? //參數(shù)

          ????? LPCTSTR lpDirectory,??? //默認(rèn)文件夾

          ????? INT nShowCmd????????? //顯示方式

          );

          使用方法如下:

          ShellExecute(NULL,"open","C:\\Test.txt",NULL,NULL,SW_SHOWNORMAL); // 打開C:\Test.txt 文件
          ShellExecute(NULL, "open", " NULL, NULL, SW_SHOWNORMAL); // 打開網(wǎng)頁www.google.com
          ShellExecute(NULL,"explore", "D:\\C++",NULL,NULL,SW_SHOWNORMAL); // 打開目錄D:\C++
          ShellExecute(NULL,"print","C:\\Test.txt",NULL,NULL, SW_HIDE); // 打印文件C:\Test.txt
          ShellExecute不支持定向輸出。


          CreateProcess

          原型如下:

          ????? BOOL CreateProcess(

          ????? LPCTSTR lpApplicationName, //執(zhí)行程序名

          ????? LPTSTR lpCommandLine, // 參數(shù)行

          ????? //下面兩個(gè)參數(shù)描述了所創(chuàng)建的進(jìn)程和線程的安全屬性,如果為NULL則使用默認(rèn)的安全屬性

          ????? LPSECURITY_ATTRIBUTES lpProcessAttributes, // process security attributes

          ????? LPSECURITY_ATTRIBUTES lpThreadAttributes,?? // thread security attributes

          ????? BOOL bInheritHandles, // 繼承標(biāo)志

          ????? DWORD dwCreationFlags, // 創(chuàng)建標(biāo)志

          ????? LPVOID lpEnvironment, // 環(huán)境變量

          ????? LPCTSTR lpCurrentDirectory,?? // 運(yùn)行該進(jìn)程的初始目錄

          ????? LPSTARTUPINFO lpStartupInfo, // 用于在創(chuàng)建子進(jìn)程時(shí)設(shè)置各種屬性

          ????? LPPROCESS_INFORMATION lpProcessInformation //用于在進(jìn)程創(chuàng)建后接受相關(guān)信息

          ????? ;

          使用方法如下:
          ???????????? PROCESS_INFORMATION pi;
          ?????????????????????? STARTUPINFO si;
          ?????????????????????? memset(&si,0,sizeof(si));
          ?????????????????????? si.cb=sizeof(si);
          ????????????????????? si.wShowWindow=SW_SHOW;
          ?????????????????????? si.dwFlags=STARTF_USESHOWWINDOW;
          ?????????????????????? bool fRet=CreateProcess("D:\\putty.exe",NULL,NULL,FALSE,NULL,NULL,NULL,NULL,&si,&pi);


          可以看出,通過上面的幾個(gè)不同的方法,都可以實(shí)現(xiàn)在應(yīng)用程序中打開其他應(yīng)用程序的目的,其中有些方法可能會(huì)麻煩一點(diǎn),所以就需要我們根據(jù)不同的目的去選擇最適合自己的方法去實(shí)現(xiàn)自己的目的!

          ?

          關(guān)于三個(gè)SDK函數(shù): WinExec, ShellExecute,CreateProcess 的其他注意事項(xiàng):

          1、定義頭文件

          在頭文件stdafx.h中必須定義以下兩個(gè)頭文件:

          #include <shlobj.h> // 可替換為 windows.h
          #include <shellapi.h>
          如果定義了頭文件 #include <windows.h>的話就不必定義 #include <shlobj.h>了,"windows.h" 不光是包含了"shellapi.h",它還定義了許多數(shù)據(jù)類型,如果沒有這些數(shù)據(jù)類型,shellapi.h本身會(huì)出錯(cuò)。

          2、定義路徑

          C++中所表示的路徑要用 " \\ "而不是平常所用的" \ ",所以以上三個(gè)函數(shù)表示路徑都為:

          Disk:\\Directory\\...\\File name

          WinExec("D:\\Program Files\\Test\\Test.exe",SW_SHOWMAXIMIZED);

          ShellExecute(NULL,"open","C:\\Test.txt",NULL,NULL,SW_SHOWNORMAL);
          bool fRet=CreateProcess("D:\\putty.exe",NULL,NULL,FALSE,NULL,NULL,NULL,NULL,&si,&pi);

          ?

          posted on 2009-06-16 16:02 -274°C 閱讀(2278) 評論(0)  編輯  收藏 所屬分類: C++

          常用鏈接

          留言簿(21)

          隨筆分類(265)

          隨筆檔案(242)

          相冊

          JAVA網(wǎng)站

          關(guān)注的Blog

          搜索

          •  

          積分與排名

          • 積分 - 914107
          • 排名 - 40

          最新評論

          主站蜘蛛池模板: 教育| 望奎县| 科技| 呼和浩特市| 江川县| 丹阳市| 灯塔市| 五华县| 房产| 江源县| 淮阳县| 玛多县| 宁城县| 禹州市| 甘洛县| 庆城县| 陵水| 陕西省| 德令哈市| 富平县| 轮台县| 文山县| 梅州市| 合川市| 华容县| 新绛县| 广宗县| 大竹县| 寻乌县| 延边| 珠海市| 中西区| 扶绥县| 辛集市| 龙海市| 梓潼县| 渭南市| 陵川县| 桐庐县| 马尔康县| 舟曲县|