WinExec, ShellExecute,CreateProcess 區別



其中以WinExec最為簡單,ShellExecute比WinExec靈活一些,CreateProcess最為復雜。

WinExec 有兩個參數,前一個指定路徑,后一個指定顯示方式。

ShellExecute 可以指定工作目錄,並且還可以尋找文件的關聯直接打開不用加載與文件關聯的應用程序,ShellExecute還可以打開網頁,啟動相應的郵件關聯發送郵件等等。

CreateProcess 一共有十個參數,不過大部分都可以用NULL代替,它可以指定進程的安全屬性,繼承信息,類的優先級等等。如果我們要得到足夠多的關於新的進程的信息,控制新的進

程的細節屬性,若要達到這些目的,就需要使用CreateProcess函數了。

具體用法如下。

 

WinExec

這個函數最簡單,只有兩個參數,原型如下:

UINT WinExec(

LPCSTR lpCmdLine,    // 命令路徑

UINT uCmdShow       // 顯示方式,共有11種,具體可以查閱MSDN的ShowWindow函數

);

使用方法如下:

WinExec("Notepad.exe", SW_SHOW); // 打開記事本

WinExec("D:\\Program Files\\Test\\Test.exe",SW_SHOWMAXIMIZED); // 以最大化的方式打開Test.exe(注意文件名的大小寫也必須完全一樣)

需要注意的是若用 SW_SHOWMAXMIZED 方式去加載一個無最大化按鈕的程序,譬如Calc (計算器),就不會出現正常的窗體,但是已經被加到任務列表里了。

 

ShellExecute

原型如下:

HINSTANCE ShellExecute(

HWND hwnd,            //父窗口句柄

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

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

LPCTSTR lpParameters,   //參數

LPCTSTR lpDirectory,     //默認文件夾

INT nShowCmd           //顯示方式

);

 

使用方法如下:

ShellExecute(NULL,"open","C:\\Test.txt",NULL,NULL,SW_SHOWNORMAL); // 打開C:\Test.txt 文件

ShellExecute(NULL, "open", "http://www.google.com", NULL, NULL, SW_SHOWNORMAL); // 打開網頁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, //執行程序名

LPTSTR lpCommandLine, // 參數行

//下面兩個參數描述了所創建的進程和線程的安全屬性,如果為NULL則使用默認的安全屬性

LPSECURITY_ATTRIBUTES lpProcessAttributes, //process security attributes

LPSECURITY_ATTRIBUTES lpThreadAttributes,    // thread security attributes

BOOL bInheritHandles, // 繼承標志

DWORD dwCreationFlags, // 創建標志

LPVOID lpEnvironment, // 環境變量

LPCTSTR lpCurrentDirectory,   // 運行該進程的初始目錄

LPSTARTUPINFO lpStartupInfo, // 用於在創建子進程時設置各種屬性

LPPROCESS_INFORMATION lpProcessInformation //用於在進程創建后接受相關信息

);

 

使用方法如下:

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);

 

由此,我就設計了三個按鈕,分別用這三種函數調用了三個應用程序,設置在每個按鈕的ONCLICK消息中:

WinExec("taskmgr",SW_NORMAL); //調用系統任務管理器

ShellExecute(NULL,"open","C:\ReadMe.txt","","",SW_SHOW); //打開C盤下的ReadMe文件

STARTUPINFO si={sizeof(si)};

PROCESS_INFORMATION pi;

CreateProcess(NULL,"cleanmgr",NULL,NULL,FALSE,NORMAL_PRIORITY_CLASS,NULL,NULL,&si,&pi); //調用系統的清理磁盤程序

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM