ä¸ä¸ªSDKå½æ°: WinExecï¼ShellExecute ï¼CreateProcesså¯ä»¥å®ç°è°ç¨å
¶ä»ç¨åºçè¦æ±ï¼å
¶ä¸ä»¥WinExecæ为ç®åï¼ShellExecuteæ¯WinExecçµæ´»ä¸äºï¼CreateProcessæ为å¤æã
WinExec 两个åæ°ï¼åä¸ä¸ªæå®è·¯å¾ï¼åä¸ä¸ªæå®æ¾ç¤ºæ¹å¼ã
ShellExecute å¯ä»¥æå®å·¥ä½ç®å½,并ä¸è¿å¯ä»¥å¯»æ¾æ件çå
³èç´æ¥æå¼ä¸ç¨å è½½ä¸æ件å
³èçåºç¨ç¨åºï¼ShellExecuteè¿å¯ä»¥æå¼ç½é¡µï¼å¯å¨ç¸åºçé®ä»¶å
³èåéé®ä»¶ççã
CreateProcess ä¸å
±æå个åæ°ï¼ä¸è¿å¤§é¨åé½å¯ä»¥ç¨NULL代æ¿ï¼å®å¯ä»¥æå®è¿ç¨çå®å
¨å±æ§ï¼ç»§æ¿ä¿¡æ¯ï¼ç±»çä¼å
级ççãå¦ææ们è¦å¾å°è¶³å¤å¤çå
³äºæ°çè¿ç¨çä¿¡æ¯ï¼æ§å¶æ°çè¿ç¨çç»èå±æ§ï¼è¥è¦è¾¾å°è¿äºç®çï¼æ们就éè¦ä½¿ç¨CreateProcesså½æ°äºã
使ç¨WinExecå½ä»¤
â´ãå½æ°ååï¼ UINT Win Exec(LPCSTR lpCmdLine, UINT uCmdShow);
âµãåæ°ï¼
lpCmdLineï¼æåä¸ä¸ªç©ºç»æçå符串ï¼ä¸²ä¸å
å«å°è¦æ§è¡çåºç¨ç¨åºçå½ä»¤è¡ï¼æ件åå ä¸å¯éåæ°ï¼ã
uCmdShowï¼å®ä¹Windowsåºç¨ç¨åºççªå£å¦ä½æ¾ç¤ºï¼å¹¶ä¸ºCreateProcesså½æ°æä¾STARTUPINFOåæ°çwShowWindowæåçå¼ã
â¶ãè¿åå¼ï¼
è¥å½æ°è°ç¨æåï¼åè¿åå¼å¤§äº31ãè¥å½æ°è°ç¨å¤±è´¥ï¼åè¿åå¼ä¸ºä¸åä¹ä¸ï¼
â ã0ï¼ç³»ç»å
åæèµæºå·²èå°½ã
â¡ãERROR_BAD_FORMATï¼EXEæ件æ æï¼éWin32.EXEæ.EXEå½±åé误ï¼ã
â¢ãERROR_FILE_NOT_FOUNDï¼æå®çæ件æªæ¾å°ã
â£ãERROR_PATH_NOT_FOUNDï¼æå®çè·¯å¾æªæ¾å°ã
è½ç¶Microsoft认为WinExecå·²è¿æ¶ï¼ä½æ¯å¨è®¸å¤æ¶åï¼ç®åçWinExecå½æ°ä»æ¯è¿è¡æ°ç¨åºçæ好æ¹å¼ãç®åå°ä¼ éä½ä¸ºç¬¬ä¸ä¸ªåæ°ç å½ä»¤è¡ï¼è¿éè¦å³å®å¦ä½æ¾ç¤ºç¨åºï¼è¯¥ç¨åºä¹è®¸ä¼å¿½è§å®ï¼ç第äºä¸ªåæ°ãé常ï¼å°å
¶è®¾ç½®ä¸ºSW_SHOWï¼ä¹å¯å°è¯SW_MINIMIZEDæ SW_MAXIMIZEDãWinExecä¸å
许ç¨CreateProcessè·å¾çææé项ï¼èå®çç¡®ç®åã
使ç¨ShellExecuteå½ä»¤
â´ãå½æ°ååï¼ HINSTANCE ShellExecute(HWND hwnd, LPCTSTR lpOperation, LPCTSTR lpFile, LPCTSTR lpParameters, LPCTSTR lpDirectory, INT nShowCmd);
âµãåæ°ï¼
hwndï¼æåç¶çªå£ççªå£å¥æãæ¤çªå£æ¥æ¶åºç¨ç¨åºäº§ççä»»ä½ä¿¡æ¯æ¡ã
lpOperationï¼ä¸ä¸ªç©ºç»æçå符串å°åï¼æ¤å符串æå®è¦æ§è¡çæä½ãä¸é¢çæä½å符串æ¯ææçï¼
"open" æ¤å½æ°æå¼ç±åæ°lpFileæå®çæ件ï¼æ¤æ件å¯ä»¥æ¯ä¸ä¸ªå¯æ§è¡æ件æææ¡£æ件ï¼ä¹å¯æ¯ä¸ä¸ªæ件夹ã
"print" æ¤å½æ°æå°ç±åæ°lpFileæå®çæ件ï¼æ¤æ件åºæ¯ä¸ä¸ªææ¡£æ件ï¼åå¦æ¤æ件æ¯ä¸ä¸ªå¯æ§è¡æ件ï¼åæå¼æ¤æ件ã
"explore" æ¤å½æ°æç´¢ç±åæ°lpFileæå®çæ件夹ï¼æ¤æ件åºæ¯ä¸ä¸ªææ¡£æä»¶ï¼ æ¤åæ°å¯ä»¥ä¸ºç©ºãè¿ç§æ
åµä¸ï¼å½æ°ç¨äºæå¼ç±åæ°lpFileæå®çæ件ã
lpFileï¼ä¸ä¸ªç©ºç»æçå符串å°åï¼æ¤å符串æå®è¦æå¼ææå°çæ件æè
æ¯è¦æå¼ææç´¢çæ件夹ã
lpParametersï¼åå¦åæ°lpFileæå®ä¸ä¸ªå¯æ§è¡æ件ï¼lpParametersåæ¯ä¸ä¸ªç©ºç»æçå符串å°åï¼æ¤å符串æå®è¦ä¼ éç»åºç¨ç¨åºçåæ°ãåå¦lpFileæå®ä¸ä¸ªææ¡£æ件ï¼lpParametersåºä¸ºç©ºã
lpDirectoryï¼ä¸ä¸ªç©ºç»æçå符串å°åï¼æ¤å符串æå®é»è®¤ç®å½ã
nShowCmdï¼åå¦lpFileæå®ä¸ä¸ªå¯æ§è¡æ件ï¼nShowCmd表æåºç¨ç¨åºæå¼æ¶å¦
ä½æ¾ç¤ºãåå¦lpFileæå®ä¸ä¸ªææ¡£æ件ï¼nShowCmdåºä¸ºç©ºã
â¶ãè¿åå¼ï¼ è¥å½æ°è°ç¨æåï¼åè¿åå¼å¤§äº32ï¼å¦å为ä¸ä¸ªå°äºçäº32çé误å¼ã
说æï¼å¯ä»¥ç¨æ¤å½æ°æå¼ææç´¢ä¸ä¸ªå¤å£³æ件夹ãæå¼æ件夹å¯ç¨ä¸é¢ä»»ä½ä¸ç§å½¢å¼ï¼
ShellExecute(handle, NULL, path_to_folder, NULL, NULL, SW_SHOWNORMAL);
æ
ShellExecute(handle, "open", path_to_folder, NULL, NULL, SW_SHOWNORMAL);
æç´¢æ件夹ï¼å¯ç¨å¦ä¸å½¢å¼
ShellExecute(handle, "explore", path_to_folder, NULL, NULL, SW_SHOWNORMAL);
ShellExecuteå½ä»¤è½å·²è¿æ¶ä½æäºå¾å°ã该å½ä»¤åå½ä»¤è§£éç¨åºæåºæå¼ãæµè§ææå°ææ¡£ææ件夹ç请æ±ï¼è½ç¶å¯ä»¥ç¨ ShellExecuteè¿è¡ç¨åºï¼ä½é常åªåéææ¡£åï¼èå½ä»¤è§£éç¨åºåå³å®è¦è¿è¡é£ä¸ªç¨åºãå¦å¤å¨æå¼ç®å½æ件夹æ¶ï¼ShellExecuteå½ä»¤é 常æç¨ã
â·ãç¨åºç¤ºä¾
ä¸é¢éè¿ä¸ä¸ªä¾åæ¥è¯´åWinExecåShellExecuteç使ç¨ãä¸é¢ç¨åºææ§å¶å°ç¨åºç¤ºä¾ï¼å
¶ä½¿ç¨ä¸¤ç§ä¸åçæ¹æ³ï¼æå¼ææ¬æ件ãä¸é¢ç¨åºä½¿ç¨WinExecï¼å¹¶æç¡®æå®ä½¿ç¨è®°äºæ¬ç¨åºãç¶åï¼ä½¿ç¨ShellExecute,æå¼ææ¬æ件ã
ç¨åºæ¸
å
#include <windows.h >
#include <iostream.h >
void main(int argc,char *argv[])
{
cout < <âOpening with WinExec\nâ;
if (WinExec(ânotepad readme.txtâ,SH_SHOW) <32)
MessagBox(NULL,âCanât WinExecâ,NULL,MB_OK);
cout < <âPress Enter\nâ;
MessagBox(NULL,âPress OK to continueâ,âProgrm Launchedâ,MB_OK);
cout < <âOpening with ShellExecute\nâ;
if (ShellExecute (NULL,âopenâ,âreadme.txtâ,NULL,NULL,SW_SHOW)
<(HANDLE) 32)
MessagBox(NULL,âCanât ShellExecute\nâ,NULL,MB_OK);
}
使ç¨CreateProcesså½ä»¤
â´ãå½æ°ååï¼
BOOL CreateProcess(
LPCTSTR lpApplicationName,
LPTSTR lpCommandLine,
LPSECURITY_ATTRIBUTES lpProcessAttributes,
LPSECURITY_ATTRIBUTES lpThreadAttributes,
BOOL bInheritHandles,
DWORD dwCreationFlags,
LPVOID lpEnvironment,
LPCTSTR lpCurrentDirectory,
LPSTARTUPINFO lpStartupInfo,
LPPROCESS_INFORMATION lpProcessInformation
);
âµãåæ°ï¼
lpApplicationNameï¼æåä¸ä¸ªä»¥ç©ºç»å°¾ç串ï¼ä»æå®äºè¦æ§è¡ç模å
lpCommandLineï¼æåä¸ä¸ªä»¥ç©ºç»å°¾ç串ï¼è¯¥ä¸²å®ä¹äºè¦æ§è¡çå½ä»¤è¡ã
lpProcessAttributesï¼æåä¸ä¸ªSECURITY_ATTRIBUTESç»æï¼è¯¥ç»æå³å®äºè¿åçå¥ææ¯å¦å¯è¢«åè¿ç¨ç»§æ¿ã
lpThreadAttributesï¼æåä¸ä¸ªSECURITY_ATTRIBUTESç»æï¼è¯¥ç»æå³å®äºè¿åçå¥ææ¯å¦å¯è¢«åè¿ç¨ç»§æ¿ã
bInheritHandles,ï¼è¡¨ææ°è¿ç¨æ¯å¦ä»è°ç¨è¿ç¨ç»§æ¿å¥æã
dwCreationFlagsï¼å®ä¹æ§å¶ä¼å
ç±»åè¿ç¨å建çéå æ å¿ã
lpEnvironmentï¼æåä¸ä¸ªæ°è¿ç¨çç¯å¢åã
lpCurrentDirectoryï¼æåä¸ä¸ªä»¥ç©ºç»å°¾ç串ï¼è¯¥ä¸²å®ä¹äºåè¿ç¨çå½å驱å¨å¨åå½åç®å½ã
lpStartupInfoï¼æåä¸ä¸ªSTARTUPINFOç»æï¼è¯¥ç»æå®ä¹äºæ°è¿ç¨ç主çªå£å°å¦ä½æ¾ç¤ºã
lpProcessInformationï¼æåPROCESS_INFORMATIONç»æï¼è¯¥ç»ææ¥åå
³äºæ°è¿ç¨ç表示信æ¯ã
â¶ãè¿åå¼ï¼
è¥å½æ°è°ç¨æåï¼åè¿åå¼ä¸ä¸º0ï¼è¥å½æ°è°ç¨å¤±è´¥ï¼è¿åå¼ä¸º0ã
ShellExecuteåWinExecå½ä»¤ç¨äºç®åçä½ä¸ãå¦æè¦å®å
¨æ§å¶ä¸ä¸ªæ°è¿ç¨ï¼
å°±å¿
é¡»è°ç¨CreateProcessã
å¨ä¸è¿°åæ°ä¸ï¼åæ°lpStartupInfoæ¯STARTUPINFOç»æãå¯ä»¥ç¨æ¥è®¾ç½®æ§å°ç
æ é¢ï¼æ°çªå£ççåå§å¤§å°åä½ç½®ï¼åéå®åæ åè¾å
¥ åè¾åºãæ°ç¨åºé常å¯ä»¥
忽ç¥å¤æ°è¿äºæ°æ®é¡¹ï¼å¦æéæ©é£æ ·åçè¯ãå¯ä»¥è§å®è¯¥ç»æä½ä¸çæ å¿ï¼å·²è¡¨æ
è¦è®¾ç½®çæ°æ®æ®µãææ¶ï¼ä¸æ³è®¾ç½®ä»»ä½ä¿¡æ¯ï¼ä¹å¿
é¡»ä¼ é ä¸ä¸ªææçæéç»ç©ºç»
æï¼ç¡®å®è®¾ç½®å¤§å°å°cbï¼å设置dwFlagsæå为0ï¼ãåæ°lpProcessInformationè¿
åè¿ç¨å线ç¨å¥æï¼è¿å
æ¬è¿ç¨å线ç¨IDãè¿äºå¥ææ¥æå¨åæ°
lpProcessAttributesålpThreadAttributesä¸è§å®ç访é®ã
è¦æ³¨æï¼é对CreateProcessçä¸äºåæ°å¯¹æ§å¶å°åºç¨ç¨åºæ¯ç¹å®çï¼èå
¶å®
åæ°å对åç§åºç¨ç¨åºæç¨ã大å¤æ°æ
åµä¸ï¼å¹¶ä¸ä¸å®è¦å¡«å
¥ STARTUPINFOç»æï¼
ä½æ 论å¦ä½å¿
é¡»æä¾å®ãå
¶è¿åå¼æ¯å¸å°åçï¼èçæ£æå
´è¶£çè¿åå¼åçäºä½ä¸º
åæ°ä¼ éçç»æä¸ ï¼PROCESS_INFORMATIONï¼ãCreateProcessè¿å该ç»æä¸çè¿
ç¨IDåå
¶å¥æï¼ä»¥ååå§çº¿ç¨IDåå
¶å¥æãå¯ä»¥å°IDåéå° å
¶å®è¿ç¨ï¼æ使ç¨å¥
ææ¥æ§å¶æ°è¿ç¨ã
温馨提示:答案为网友推荐,仅供参考