一、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/n/183519.html
微信扫一扫
支付宝扫一扫