STARTUPINFO结构与CreateProcess函数一起使用,以便为新进程创建新窗口时指定主窗口属性。对于图形用户界面(GUI)进程,此信息影响由CreateWindow函数创建并由ShowWindow功能显示的第一个窗口。对于控制台进程,如果为进程创建了新的控制台,则此信息会影响控制台窗口。进程可以使用GetStartupInfo函数来检索创建进程时指定的STARTUPINFO结构。
typedef struct _STARTUPINFO { // si
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;
会员
cb
指定结构的大小(以字节为单位)。
lpReserved
保留。在将结构传递给CreateProcess之前将此成员设置为NULL。
lpDesktop
仅Windows NT:指向一个零终止的字符串,指定桌面的名称或此进程的窗口台和桌面的名称。lpDesktop指向的字符串中的反斜杠表示该字符串包括桌面和窗口站名称。否则,lpDesktop字符串将被解释为桌面名称。如果lpDesktop为NULL,则新进程将继承其父进程的窗口工作站和桌面。
lpTitle
对于控制台进程,如果创建了新的控制台窗口,则这是标题栏中显示的标题。如果为NULL,则将可执行文件的名称用作窗口标题。对于不创建新控制台窗口的GUI或控制台进程,此参数必须为NULL。
DWX,二
忽略dwFlags中指定STARTF_USEPOSITION。指定创建新窗口时窗口左上角的x和y偏移(以像素为单位)。偏移量来自屏幕的左上角。对于GUI进程,如果CreateWindow的【x】参数为CW_USEDEFAULT,则新进程首次调用CreateWindow创建重叠窗口时,将使用指定的位置。
dwXSize,dwYSize
忽略dwFlags中指定STARTF_USESIZE。指定创建新窗口时窗口的宽度(dwXSize)和高度(dwYSize)(以像素为单位)。对于GUI进程,如果CreateWindow的【nWidth】参数为CW_USEDEFAULT,则仅在新进程第一次调用CreateWindow创建重叠窗口时使用。
dwXCountChars,dwYCountChars
忽略dwFlags中指定STARTF_USECOUNTCHARS。对于控制台进程,如果创建了新的控制台窗口,dwXCountChars指定字符列中的屏幕缓冲区宽度,dwYCountChars指定字符行中的屏幕缓冲区高度。这些值在GUI进程中被忽略。
dwFillAttribute
忽略dwFlags中指定STARTF_USEFILLATTRIBUTE。如果在控制台应用程序中创建新的控制台窗口,则指定初始文本和背景颜色。这些值在GUI应用程序中被忽略。此值可以是以下值的任意组合:FOREGROUND_BLUE,FOREGROUND_GREEN,FOREGROUND_RED,FOREGROUND_INTENSITY,BACKGROUND_BLUE,BACKGROUND_GREEN,BACKGROUND_RED和BACKGROUND_INTENSITY。例如,以下值的组合会在黑白背景上产生红色文本:
FOREGROUND_RED | BACKGROUND_RED | BACKGROUND_GREEN | BACKGROUND_BLUE
dwFlags中
这是一个位字段,用于确定在进程创建窗口时是否使用某些STARTUPINFO成员。可以指定以下值的任意组合:
值 | 含义 |
STARTF_USESHOWWINDOW | 如果未指定此值,则wShowWindow成员将被忽略。 |
STARTF_USEPOSITION | 如果未指定此值,则DWX和两成员将被忽略。 |
STARTF_USESIZE | 如果未指定此值,将忽略dwXSize和dwYSize成员。 |
STARTF_USECOUNTCHARS | 如果未指定此值,则dwXCountChars和dwYCountChars成员将被忽略。 |
STARTF_USEFILLATTRIBUTE | 如果未指定此值,则dwFillAttribute成员将被忽略。 |
STARTF_FORCEONFEEDBACK | 如果指定了此值,则调用CreateProcess后,光标处于反馈模式两秒钟。如果在这两秒钟内,进程进行第一次GUI调用,系统再为该进程提供五秒钟。如果在这五秒钟的过程中显示一个窗口,系统会再次给出五秒钟的时间来完成窗口的绘制。 |
第一次调用GetMessage后,系统会将反馈光标关闭,无论进程是否正在绘制。 | |
有关反馈的更多信息,请参阅以下备注部分。 | |
STARTF_FORCEOFFFEEDBACK | 如果指定,反馈光标在进程开始时被强制关闭。显示普通光标。有关反馈的更多信息,请参阅以下备注部分。 |
STARTF_USESTDHANDLES | 如果指定了此值,则将进程的标准输入,标准输出和标准错误句柄设置为hStdOutput hStdOutput和hStdError STARTUPINFO结构中的成员指定的句柄。必须将CreateProcess函数的【fInheritHandles】参数设置为TRUE才能正常工作。 |
如果未指定此值,则将忽略STARTUPINFO结构的hStdInput,hStdOutput和hStdError成员。 |
wShowWindow
忽略dwFlags中指定STARTF_USESHOWWINDOW。wshowWindow成员可以是在WINUSER.H中定义的任何SW_常量。对于GUI进程,wShowWindow在第一次调用ShowWindow时指定默认值。ShowWindow的【nCmdShow】参数将被忽略。在随后的ShowWindow电话中,如果ShowWindow的【nCmdShow】参数设置为SW_SHOWDEFAULT,则使用wShowWindow成员。
cbReserved2
Reserved; must be zero.
lpReserved2
Reserved; must be NULL.
hStdInput
忽略dwFlags中指定STARTF_USESTDHANDLES。指定如果指定了STARTF_USESTDHANDLES,该句柄将用作该进程的标准输入句柄。
hStdOutput
忽略dwFlags中指定STARTF_USESTDHANDLES。指定如果指定了STARTF_USESTDHANDLES,将用作该进程的标准输出句柄的句柄。
hStdError
忽略dwFlags中指定STARTF_USESTDHANDLES。指定如果指定了STARTF_USESTDHANDLES,将用作该进程的标准错误句柄的句柄。
备注
如果GUI进程正在启动,并且没有指定STARTF_FORCEONFEEDBACK或STARTF_FORCEOFFFEEDBACK,则使用进程反馈光标。GUI进程是一个子系统被指定为“windows”的进程。
也可以看看
CreateProcess, CreateWindow, GetMessage, GetStartupInfo, PeekMessage, ShowWindow, WinMain