一、si啟動信息結構體
startupinfo是windows api中的結構體,用於設置新進程的一些信息,具體包括:
- 輸入、輸出和錯誤輸出的描述符
- 進程的窗口大小和位置以及是否顯示在任務欄上
- 進程的初始狀態,如是否使用新控制台窗口
- 進程的環境變數,當前目錄,主線程安全描述符,創建標誌等。
二、startupinfo取值來源
在調用CreateProcess函數時,startupinfo是一個指向STARTUPINFO結構體的指針參數,在函數調用中這個指針指向的結構體中存放了一些啟動信息。
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 );
三、startupinfo頭文件
要使用startupinfo,需要包含windows.h頭文件。
#include <windows.h>
四、startupinfologger
對於開發者調試和排查問題時,可以利用startupinfo來輸出日誌信息以幫助診斷問題。
//示例代碼 TCHAR logBuffer[1024]; ZeroMemory(logBuffer, sizeof(logBuffer)); STARTUPINFO si; ZeroMemory(&si, sizeof(STARTUPINFO)); si.cb = sizeof(STARTUPINFO); si.dwFlags = STARTF_USESTDHANDLES; CreateProcess(NULL, L"test.exe", NULL, NULL, TRUE, 0, NULL, NULL, &si, &pi); Sleep(5000); _tcscat(logBuffer, L"CreateProcess函數調用成功!"); //輸出日誌信息 OutputDebugString(logBuffer);
五、startupinfo的第一成員含義
STARTUPINFO結構體中第一個成員cb含義如下:
cb(DWORD類型):STARTUPINFO結構體的長度
如果在CreateProcess函數中設置了這個成員的值,那麼這個值必須等於結構體的大小,否則將會拋出ERROR_INVALID_PARAMETER類型的錯誤。
示例代碼:
STARTUPINFO si; si.cb = sizeof(si); //設置成員cb的值為結構體si的大小
六、startupinfo不在任務欄出現選取
在windows中,設置startupinfo的dwFlags成員可以控制新進程是否出現在任務欄中。
在調用CreateProcess函數之前,用位或運算符|將dwFlags成員設置為起始標誌STARTF_USESHOWWINDOW和flag。
//讓新進程不在任務欄中顯示 si.dwFlags = STARTF_USESHOWWINDOW | SW_HIDE;
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/183519.html
微信掃一掃
支付寶掃一掃