關于創建一個進程的CreateProcess函數:
首先給出函數原型及相應解釋:
BOOL CreateProcess(
LPCTSTR lpApplicationName, //可執行文件的名稱
LPTSTR lpCommandLine, //要傳給新進程的命令行
LPSECURITY_ATTRIBUTES lpProcessAttributes, //進程的安全描述符
LPSECURITY_ATTRIBUTES lpThreadAttributes, //線程的安全描述符
BOOL bInheritHandles, //是否繼承
DWORD dwCreationFlags, //表示新進程創建的方式
LPVOID lpEnvironment, //環境變量
LPCTSTR lpCurrentDirectory, //指定工作路徑
LPSTARTUPINFO lpStartupInfo, //決定打開的窗體如何顯示
LPPROCESS_INFORMATIONlpProcessInformation //返回該新進程及其主線程的信息
);```
> 其實就相當于在cmd里面手動打開一個PE文件
- 前兩個參數就分別是文件名和后面跟的參數(比如shutdown.exe -s -t 3600)
- 也可以只寫命令行(即第二個參數)
- 注意寫路徑的時候是\\不是\ 因為\+字母會被識別成轉義字符
- 兩個安全描述符一般都留作NULL 使用默認的參數
- 繼承看需求了 TRUE or FALSE
- dwCreationFlags:這個就相當于功能選項一樣 隨用隨查都行
- 環境變量和工作路徑NULL默認就好
- 接下來兩個結構體 需要我們手工去聲明一下
STARTUPINFO si={sizeof(si)};
PROCESS_INFORMATION pi;
si.dwFlags = STARTF_USESHOWWINDOW;//指定wShowWindow成員有效
si.wShowWindow = TRUE;//此成員設為TRUE的話則顯示新建進程的主窗口```
像這樣
結構體中需要去設置的再去設置 其他放著不管就行
PROCESS_INFORMATION里面還有兩個句柄 不使用的話最好關掉
如:CloseHandle(pi.hThread); CloseHandle(pi.hProcess);
函數原型什么的請見4~
初始化什么的請見4~
這里記錄的是ShellExecuteEx的正確姿勢~
打開一個應用程序或文本或網頁
SHELLEXECUTEINFO ShellInfo;
memset(&ShellInfo, 0, sizeof(ShellInfo));
ShellInfo.cbSize = sizeof(ShellInfo);
ShellInfo.hwnd = NULL;
ShellInfo.lpVerb = TEXT("open");
ShellInfo.lpFile = szFilePath; // 此處寫執行文件的絕對路徑或網址
ShellInfo.nShow = SW_SHOWNORMAL;
ShellInfo.fMask = SEE_MASK_NOCLOSEPROCE //表示啟用hProcess記錄新進程句柄
BOOL bResult = ShellExecuteEx(&ShellInfo);