1. 程式人生 > >VC開啟另一個應用程式

VC開啟另一個應用程式

要在應用程式中啟動其他的應用程式,有3個函式可以使用,下面我一一說說他們(我以開啟D:\Program Files\zeecalls\目錄下的zeecalls.exe應用程式為例):

1、Winexec

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

UINT WinExec(
LPCSTR lpCmdLine, // address of command line
UINT uCmdShow // window style for new application
);

使用方法如下:

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

這句話將會以最大化的方式開啟zeecalls.exe,需要注意的是,在VC中,‘/’需要以‘//’來寫。

2、ShellExecute

shellExecute比WinExex靈活一點,所以引數就要多一點,原型如下:

HINSTANCE ShellExecute(
HWND hwnd, //父視窗控制代碼
LPCTSTR lpOperation,//開啟方式
LPCTSTR lpFile, //待開啟的檔名
LPCTSTR lpParameters, LPCTSTR lpDirectory,//檔案路徑
INT nShowCmd );

同樣,我們也可以通過這個函式來開啟我們需要的檔案:

ShellExecute(NULL,_T("open"),_T("zeecalls.exe"),NULL,_T("D:\\Program Files\\zeecalls\\"),SW_SHOWNORMAL);

這句話是以用正常的顯示方式開啟zeecalls.exe
3、CreateProcess

上面的幾種方式都實現了我們在自己的應用程式中開啟其他的應用程式的目的,但是,我們沒有得到足夠多的關於新的程序的資訊,也沒有使用過多的手段去控制新的程序的細節屬性,所以,如果要達到這些目的,我們就需要使用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 //用於在程序建立後接受相關資訊
);

在上面的引數中,使用了兩個比較重要的資料結構:STARTUPINFO和PROCESS_INFORMATION。這兩個結構的定義分別如下:

typedef struct _STARTUPINFO { // si
DWORD cb; //結構長度
LPTSTR lpReserved; //保留
LPTSTR lpDesktop; //保留
LPTSTR lpTitle; //如果為控制檯程序則為顯示的標題
DWORD dwX; //視窗橫座標
DWORD dwY; //視窗叢座標
DWORD dwXSize; //視窗寬度
DWORD dwYSize; //視窗高度
DWORD dwXCountChars; //控制檯視窗字元號寬度
DWORD dwYCountChars; //控制檯視窗字元號高度
DWORD dwFillAttribute; //控制檯視窗填充模式
DWORD dwFlags; //建立標記
WORD wShowWindow; //視窗顯示標記,如同ShowWindow中的標記


WORD cbReserved2; //保留引數
LPBYTE lpReserved2; //保留引數
HANDLE hStdInput; //標準輸入控制代碼
HANDLE hStdOutput; //標準輸出控制代碼
HANDLE hStdError; //標準錯誤控制代碼
} STARTUPINFO, *LPSTARTUPINFO;

typedef struct _PROCESS_INFORMATION { // pi
HANDLE hProcess; //程序控制代碼
HANDLE hThread; //程序的主執行緒控制代碼
DWORD dwProcessId; //程序的ID
DWORD dwThreadId; //程序的主執行緒ID
} PROCESS_INFORMATION;

作為例子,我們來看看如何使用CreateProcess來開啟相同的檔案:

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:\\Program Files\\zeecalls\\zeecalls.exe",NULL,NULL,FALSE,NULL,NULL,NULL,NULL,&si,&pi);

可以看出,通過上面的幾個不同的方法,都可以實現在應用程式中開啟其他應用程式的目的,以上幾種方法可能有些會麻煩一點,所以就需要我們根據不同的目的去選擇最適合自己的方法去實現自己的目的!

最後,我希望大家可以多給我提提意見,因為我也是初學,有許多地方還不是很明白,有些方法可能是走彎路的,這就需要大家給我幫助了!