結構原型
typedef struct _STARTUPINFO {
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;
WORD cbReserved2;
LPBYTE lpReserved2;
HANDLE hStdInput;
HANDLE hStdOutput;
HANDLE hStdError;
} STARTUPINFO, *LPSTARTUPINFO;
參數說明
STARTUPINFO結構 該結構用於指定新進程的主視窗特性
DWORD cb; //包含STARTUPINFO結構中的位元組數.如果Microsoft將來擴展該結構,它可用作
版本控制手段,應用程式必須將cb初始化為sizeof(STARTUPINFO)。
LPSTR lpReserved; //保留。必須初始化為NULL。
LPSTR lpDesktop; //用於標識啟動應用程式所在的桌面的名字。如果該桌面存在,新進程便與指定的桌面相關聯。如果桌面不存在,便創建一個帶有默認屬性的桌面,並使用為新進程指定的名字。如果lpDesktop是NULL(這是最常見的情況),那么該進程將與當前桌面相關聯。
LPSTR lpTitle; //用於設定控制台視窗的名稱。如果lpTitle是NULL,則
執行檔的名字將用作視窗名
DWORD dwX; //用於設定應用程式視窗在螢幕上應該放置的位置的x和y坐標(以像素為單位)。
DWORD dwY; 只有當子進程用CW_USEDEFAULT作為CreateWindow的x參數來創建它的第一個重疊視窗時,
才使用這兩個坐標。若是創建控制台視窗的應用程式,這些成員用於指明控制台視窗的左上角
DWORD dwXSize; //用於設定應用程式視窗的寬度和長度(以像素為單位)只有dwYsize
DWORD dwYSize; 當子進程將CW_USEDEFAULT用作CreateWindow的nWidth參數來創建它的第一個重疊視窗時,才使用這些值。
DWORD dwXCountChars; //用於設定子應用程式的控制台視窗的寬度和高度(以
字元為單位)
DWORD dwYCountChars;
DWORD dwFillAttribute; //用於設定子應用程式的控制台視窗使用的文本和背景顏色
DWORD dwFlags; //請參見下一段和表4 - 7 的說明
WORD wShowWindow; //用於設定如果子應用程式初次調用的ShowWindow將SW_SHOWDEFAULT作為nCmdShow
參數傳遞時,該應用程式的第一個重疊視窗應該如何出現。
本成員可以是通常用於ShowWindow 函式的任何一個SW _ *
標識符WORD cbReserved2; //保留。必須被初始化為0
PBYTE lpReserved2; //保留。必須被初始化為NULL
HANDLE hStdInput; //用於設定供控制台輸入和輸出用的快取的句柄。按照默認設定,hStdInput用於標識鍵盤快取,hStdOutput和hStdError用於標識控制台視窗的快取
HANDLE hStdOutput;
HANDLE hStdError;
當Windows創建新進程時,它將使用該結構的有關成員。大多數應用程式將要求生成的應用程式僅僅使用默認值。至少應該將該結構中的所有成員初始化為零,然後將cb成員設定為該結構的大小:
STARTUPINFO si = { sizeof(si) };
CreateProcess(...,&si,...);
表4-7 dwFlags 使用標誌及含義
標誌 含義
STARTF_USESIZE // 使用dwXSize和dwYSize成員
STARTF_USESHOWWINDOW //使用wShowWindow成員
STARTF_USEPOSITION //使用dwX和dwY成員
STARTF_USECOUNTCHARS //使用dwXCountChars和dwYCountChars成員
STARTF_USEFILLATTRIBUTE //使用dwFillAttribute成員
STARTF_USESTDHANDLES //使用hStdInput、hStdOutput和hStdError成員
STARTF_RUN_FULLSCREEN //強制在x 8 6 計算機上運行的控制台應用程式以全螢幕幕方式啟動運行
另外還有兩個標誌,即
STARTF_FORCEONFEEDBACK和STARTF_+FORCEOFFF -EEDBACK ,當啟動一個新進程時,它們可以用來控制滑鼠的游標。由於Windows支持真正的多任務
搶占式運行方式,因此可以啟動一個應用程式,然後在進程初始化時,使用另一個程式。為了向用戶提供直觀的反饋信息,C r e a t e P r o c e s s 能夠臨時將系統的箭頭游標改為一個新游標,即沙漏箭頭游標:
該游標表示可以等待出現某種情況,也可以繼續使用系統。當啟動另一個進程時,CreateProcess函式使你能夠更好地控制游標。當設定STARTF_FORCEONFEEDBACK標誌時,C r e a t e P r o c e s s 並不將游標改為沙漏。
STARTF_FORCEONFEEDBACK可使CreateProcess能夠監控新進程的初始化,並可根據結果來改變游標。當使用該標誌來調用CreateProcess時,游標改為沙漏。過2 s 後,如果新進程沒有調用G U I ,CreateProcess 將游標恢復為箭頭。
如果該進程在2 s 內調用了GUI ,CreateProcess將等待該應用程式顯示一個視窗。這必須在進程調用G U I 後5 s內發生。如果沒有顯示視窗,CreateProcess就會恢復原來的游標。如果顯示了一個視窗,CreateProcess將使沙漏游標繼續保留5s 。如果某個時候該應用程式調用了G e t M e s s a g e 函式,指明它完成了初始化,那么C r e a t e P r o ce s s 就會立即恢復原來的游標,並且停止監控新進程。
在結束這一節內容的介紹之前,我想講一講S TA RT U P I N F O 的w S h o w Wi n d o w成員。你將該成員初始化為傳遞給( w ) Wi n M a i n 的最後一個參數n C m d S h o w的值。該成員顯示你想要傳遞給新進程的( w ) Wi n M a i n 函式的最後一個參數n C m d S h o w的值。它是可以傳遞給S h o w Wi n d o w 函式的標識符之一。通常,n C m d S h o w 的值既可以是S W _ SH O W N O R M A L ,也可以是SW_ SHOWMINNOACTIVE 。但是,它有時可以是S W _ S H O W D EFA U LT 。
當在E x p l o r e r 中啟動一個應用程式時,該應用程式的( w ) Wi n M a i n 函式被調用,而S W _ SH O W N O R M A L 則作為n C m d S h o w參數來傳遞。如果為該應用程式創建了一個捷徑,可以使用捷徑的屬性頁來告訴系統,應用程式的視窗最初應該如何顯示。圖4 - 3 顯示了運行No t e p a d 的捷徑的屬性頁。注意,使用R u n 選項的
組合框,就能夠設定如何顯示N o t e p a d 的視窗。
當使用E x p l o r e r 來啟動該捷徑時,E x p l o r e r 會正確地準備S TA RT U P I N FO 結構並調用C r e a t e P r o c e s s 。這時N o t e p a d 開始運行,並且為n C m d S h ow 參數將S W _ S H O W M I N N O A C T I V E傳遞給它的( w ) Wi n M a i n 函式。
運用這樣的方法,用戶能夠很容易地啟動一個應用程式,其主視窗可以用正常狀態、最小或最大狀態進行顯示。
最後,應用程式可以調用下面的函式,以便獲取由
父進程初始化的S TA RT U P I N F O 結構的拷貝。子進程可以查看該結構,並根據該結構的成員的值來改變它的行為特性。
注意雖然Wi n d o w s 文檔沒有明確地說明,但是在調用G e t S t a r t I n f o 函式之前,必須像下面這樣對該結構的c b 成員進行初始化:
STARTUPINFO si = { sizeof(si) };
GetStartupInfo(&si);
其他編程
------------------------------
.版本 2
.數據類型 STARTUPINFO, , 啟動信息。
.成員 cb, 整數型它可用作
版本控制手段應用程式必須將cb初始化為sizeof(STARTUPINFO)
.成員 lpReserved, 整數型, , , PSTR lpReserved; //保留。必須初始化為N U L L
.成員 lpDesktop, 整數型
.成員 lpTitle, 整數型
.成員 dwX, 整數型, , ,
.成員 dwY, 整數型, , , DWORD dwY; 只有當子進程用CW_USEDEFAULT作為CreateWindow的x參數來創建它的第一個重疊視窗時才使用這兩個坐標。
.成員 dwXSize, 整數型, , ,
.成員 dwYSize, 整數型, , ,
.成員 dwXCountChars, 整數型, ,
.成員 dwYCountChars, 整數型
.成員 dwFillAttribute, 整數型, ,
.成員 dwFlags, 整數型, , , STARTF_FORCEONFEEDBACK0x00000040;STARTF_FORCEOFFFEEDBACK0x00000080;STARTF_PREVENTPINNING0x00002000;STARTF_RUNFULLSCREEN0x00000020;STARTF_TITLEISAPPID0x00001000;STARTF_TITLEISLINKNAME0x00000800;STARTF_USECOUNTCHARS0x00000008;STARTF_USEFILLATTRIBUTE0x00000010;STARTF_USEHOTKEY0x00000200;STARTF_USEPOSITION0x00000004;STARTF_USESHOWWINDOW0x00000001;STARTF_USESIZE0x00000002;STARTF_USESTDHANDLES0x00000100
.成員 wShowWindow, 短整數型, , , WORD wShowWindow; //用於設定如果子應用程式初次調用的S h o w Wi n d o w 將S W _ S H O W D E FA U LT 作為n C m d S h o w 參數傳遞時,該應用程式的第一個重疊視窗應該如何出現。本成員可以是通常用於Show Wi n d o w 函式的任何一個S W _ *標識符
.成員 cbReserved2, 短整數型, , , WORD cbReserved2; //保留。必須被初始化為0
.成員 lpReserved2, 整數型, , , PBYTE lpReserved2; //保留。必須被初始化為N U L L
.成員 hStdInput, 整數型, , 按照默認設定,h S t d I n p u t 用於標識鍵盤快取
.成員 hStdOutput, 整數型
.成員 hStdError, 整數型