ZeroMemory(&si,sizeof(si));是使用ZeroMemory,用0填充si,就是清零。
si.cb=sizeof(si);是給結構體si對象的cb變量賦值
si.wShowWindow = SW_SHOW; 是給結構體si對象的wShowWindow變量賦值
si.dwFlags = STARTF_USESHOWWINDOW;是給結構體si對象的dwFlags變量賦值
妳可以百度搜壹下這個結構體的名稱,可以看看它的定義(妳的問題中只賦值了3個變量):
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
×××××××××××××××××××××××××××××××××××××××××××××××××××××××
以上是結構體的定義,以下是結構體的說明(看上面的三個變量的含義就ok了,剩下的看不看取決於妳的需要):
×××××××××××××××××××××××××××××××××××××××××××××××××××××××
STARTUPINFO結構 該結構用於指定新進程的主窗口特性
DWORD cb; //包含STARTUPINFO結構中的字節數.如果Microsoft將來擴展該結構,它可用作版本控制手段.
應用程序必須將cb初始化為sizeof(STARTUPINFO)
PSTR lpReserved; //保留。必須初始化為N U L L
PSTR lpDesktop; //用於標識啟動應用程序所在的桌面的名字。如果該桌面存在,新進程便與指定的桌面相關聯。
如果桌面不存在,便創建壹個帶有默認屬性的桌面,並使用為新進程指定的名字。
如果lpDesktop是NULL(這是最常見的情況),那麽該進程將與當前桌面相關聯
PSTR lpTitle; //用於設定控制臺窗口的名稱。如果l p Ti t l e 是N U L L ,則可執行文件的名字將用作窗口名
DWORD dwX; //用於設定應用程序窗口在屏幕上應該放置的位置的x 和y 坐標(以像素為單位)。
DWORD dwY; 只有當子進程用CW_USEDEFAULT作為CreateWindow的x參數來創建它的第壹個重疊窗口時,
才使用這兩個坐標。若是創建控制臺窗口的應用程序,這些成員用於指明控制臺窗口的左上角
DWORD dwXSize; //用於設定應用程序窗口的寬度和長度(以像素為單位)只有dwYsize
DWORD dwYSize; 當子進程將C W _ U S E D E FA U LT 用作C r e a t e Wi n d o w 的
n Wi d t h參數來創建它的第壹個重疊窗口時,才使用這些值。
DWORD dwXCountChars; //用於設定子應用程序的控制臺窗口的寬度和高度(以字符為單位)
DWORD dwYCountChars;
DWORD dwFillAttribute; //用於設定子應用程序的控制臺窗口使用的文本和背景顏色
DWORD dwFlags; //請參見下壹段和表4 - 7 的說明
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 _ *標識符
WORD cbReserved2; //保留。必須被初始化為0
PBYTE lpReserved2; //保留。必須被初始化為N U L L
HANDLE hStdInput; //用於設定供控制臺輸入和輸出用的緩存的句柄。
按照默認設置,h S t d I n p u t 用於標識鍵盤緩存,
h S t d O u t p u t 和h S t d E r r o r用於標識控制臺窗口的緩存
HANDLE hStdOutput;
HANDLE hStdError;
當Wi n d o w s 創建新進程時,它將使用該結構的有關成員。大多數應用程序將要求生成的應用程序僅僅使用默認值。至少應該將該結構中的所有成員初始化為零,然後將c b 成員設置為該結構的大小:
STARTUPINFO si = { sizeof(si) };
CreateProcess(...,&si,...);
表4-7 dwFlags 使用標誌及含義
標誌 含義
STARTF_USESIZE // 使用d w X S i z e 和d w Y S i z e 成員
STARTF_USESHOWWINDOW //使用w S h o w Wi n d o w 成員
STARTF_USEPOSITION //使用d w X 和d w Y 成員
STARTF_USECOUNTCHARS //使用d w X C o u n t C h a r s 和dwYCount Chars 成員
STARTF_USEFILLATTRIBUTE //使用d w F i l l A t t r i b u t e 成員
STARTF_USESTDHANDLES //使用h S t d I n p u t 、h S t d O u t p u t 和h S t d E r r o r 成員
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 結構的拷貝。子進程可以查看該結構,並根據該結構的成員的值來改變它的行為特性。
VOIDGetStartupInfo(LPSTARTUPINFO pStartupInfo);
註意雖然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);
如果對妳有點幫助,望采納!!!