可以實(shí)現調用其他程序的要求,其中以WinExec最為簡(jiǎn)單,ShellExecute比WinExec靈活一些,CreateProcess最為復雜。
WinExec 兩個(gè)參數,前一個(gè)指定路徑,后一個(gè)指定顯示方式。
ShellExecute 可以指定工作目錄,并且還可以尋找文件的關(guān)聯(lián)直接打開(kāi)不用加載與文件關(guān)聯(lián)的應用程序,ShellExecute還可以打開(kāi)網(wǎng)頁(yè),啟動(dòng)相應的郵件關(guān)聯(lián)發(fā)送郵件等等。
CreateProcess 一共有十個(gè)參數,不過(guò)大部分都可以用NULL代替,它可以指定進(jìn)程的安全屬性,繼承信息,類(lèi)的優(yōu)先級等等。如果我們要得到足夠多的關(guān)于新的進(jìn)程的信息,控制新的進(jìn)程的細節屬性,若要達到這些目的,我們就需要使用CreateProcess函數了。
三個(gè)SDK函數( WinExec、ShellExec、CrateProcess )的語(yǔ)法:
WinExec
這個(gè)函數最簡(jiǎn)單,只有兩個(gè)參數,原型如下:
UINT WinExec(
LPCSTR lpCmdLine, // 命令路徑
UINT uCmdShow // 顯示方式;
使用方法如下:
WinExec("Notepad.exe", SW_SHOW); // 打開(kāi)記事本
WinExec("D:\\Program Files\\Test\\Test.exe",SW_SHOWMAXIMIZED); // 以最大化的方式打開(kāi)Test.exe
需要注意的是若用 SW_SHOWMAXMIZED 方式去加載一個(gè)無(wú)最大化按鈕的程序,譬如Neterm,Calc 等等,就不會(huì )出現正常的 窗體,但是已經(jīng)被加到任務(wù)列表里了。
ShellExecute
原型如下:
HINSTANCE ShellExecute(
HWND hwnd, //父窗口句柄
LPCTSTR lpOperation, //操作, 打開(kāi)方式 "edit","explore","open","find","print","NULL"
LPCTSTR lpFile, //文件名,前面可加路徑
LPCTSTR lpParameters, //參數
LPCTSTR lpDirectory, //默認文件夾
INT nShowCmd //顯示方式
);
使用方法如下:
ShellExecute(NULL,"open","C:\\Test.txt",NULL,NULL,SW_SHOWNORMAL); // 打開(kāi)C:\Test.txt 文件
ShellExecute(NULL, "open", "http://www.google.com",/ NULL, NULL, SW_SHOWNORMAL); // 打開(kāi)網(wǎng)頁(yè)www.google.com
ShellExecute(NULL,"explore", "D:\\C++",NULL,NULL,SW_SHOWNORMAL); // 打開(kāi)目錄D:\C++
ShellExecute(NULL,"print","C:\\Test.txt",NULL,NULL, SW_HIDE); // 打印文件C:\Test.txt
ShellExecute不支持定向輸出。
CreateProcess
原型如下:
BOOL CreateProcess(
LPCTSTR lpApplicationName, //執行程序名
LPTSTR lpCommandLine, // 參數行
//下面兩個(gè)參數描述了所創(chuàng )建的進(jìn)程和線(xiàn)程的安全屬性,如果為NULL則使用默認的安全屬性
LPSECURITY_ATTRIBUTES lpProcessAttributes, // process security attributes
LPSECURITY_ATTRIBUTES lpThreadAttributes, // thread security attributes
BOOL bInheritHandles, // 繼承標志
DWORD dwCreationFlags, // 創(chuàng )建標志
LPVOID lpEnvironment, // 環(huán)境變量
LPCTSTR lpCurrentDirectory, // 運行該進(jìn)程的初始目錄
LPSTARTUPINFO lpStartupInfo, // 用于在創(chuàng )建子進(jìn)程時(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);
可以看出,通過(guò)上面的幾個(gè)不同的方法,都可以實(shí)現在應用程序中打開(kāi)其他應用程序的目的,其中有些方法可能會(huì )麻煩一點(diǎn),所以就需要我們根據不同的目的去選擇最適合自己的方法去實(shí)現自己的目的!
關(guān)于三個(gè)SDK函數: WinExec, ShellExecute,CreateProcess 的其他注意事項:
1、定義頭文件
在頭文件stdafx.h中必須定義以下兩個(gè)頭文件:
#include <shlobj.h> // 可替換為 windows.h
#include <shellapi.h>
如果定義了頭文件 #include <windows.h>的話(huà)就不必定義 #include <shlobj.h>了,"windows.h" 不光是包含了"shellapi.h",它還定義了許多數據類(lèi)型,如果沒(méi)有這些數據類(lèi)型,shellapi.h本身會(huì )出錯。
2、定義路徑
C++中所表示的路徑要用 " \\ "而不是平常所用的" \ ",所以以上三個(gè)函數表示路徑都為:
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);
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1484984
聯(lián)系客服