STARTUPINFO

STARTUPINFO【STARTUPINFO】STARTUPINFO用于指定新进程的主视窗特性的一个结构 。
结构原型typedef struct _STARTUPINFO {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;参数说明STARTUPINFO结构 该结构用于指定新进程的主视窗特性DWORD cb; //包含STARTUPINFO结构中的位元组数.如果Microsoft将来扩展该结构,它可用作版本控制手段 , 应用程式必须将cb初始化为sizeof(STARTUPINFO) 。LPSTR lpReserved; //保留 。必须初始化为NULL 。LPSTR lpDesktop; //用于标识启动应用程式所在的桌面的名字 。如果该桌面存在 , 新进程便与指定的桌面相关联 。如果桌面不存在 , 便创建一个带有默认属性的桌面 , 并使用为新进程指定的名字 。如果lpDesktop是NULL(这是最常见的情况),那幺该进程将与当前桌面相关联 。LPSTR lpTitle; //用于设定控制台视窗的名称 。如果lpTitle是NULL , 则执行档的名字将用作视窗名DWORD dwX; //用于设定应用程式视窗在萤幕上应该放置的位置的x和y坐标(以像素为单位) 。DWORD dwY; 只有当子进程用CW_USEDEFAULT作为CreateWindow的x参数来创建它的第一个重叠视窗时,才使用这两个坐标 。若是创建控制台视窗的应用程式 , 这些成员用于指明控制台视窗的左上角DWORD dwXSize; //用于设定应用程式视窗的宽度和长度(以像素为单位)只有dwYsizeDWORD dwYSize; 当子进程将CW_USEDEFAULT用作CreateWindow的nWidth参数来创建它的第一个重叠视窗时 , 才使用这些值 。DWORD dwXCountChars; //用于设定子应用程式的控制台视窗的宽度和高度(以字元为单位)DWORD dwYCountChars;DWORD dwFillAttribute; //用于设定子应用程式的控制台视窗使用的文本和背景颜色DWORD dwFlags; //请参见下一段和表4 - 7 的说明WORD wShowWindow; //用于设定如果子应用程式初次调用的ShowWindow将SW_SHOWDEFAULT作为nCmdShow参数传递时 , 该应用程式的第一个重叠视窗应该如何出现 。本成员可以是通常用于ShowWindow 函式的任何一个SW _ *标识符WORD cbReserved2; //保留 。必须被初始化为0PBYTE lpReserved2; //保留 。必须被初始化为NULLHANDLE hStdInput; //用于设定供控制台输入和输出用的快取的句柄 。按照默认设定 , hStdInput用于标识键盘快取 , hStdOutput和hStdError用于标识控制台视窗的快取HANDLE hStdOutput;HANDLE hStdError;当Windows创建新进程时 , 它将使用该结构的有关成员 。大多数应用程式将要求生成的应用程式仅仅使用默认值 。至少应该将该结构中的所有成员初始化为零 , 然后将cb成员设定为该结构的大小:STARTUPINFO si = { sizeof(si) };CreateProcess(...,&si,...);表4-7 dwFlags 使用标誌及含义标誌 含义STARTF_USESIZE // 使用dwXSize和dwYSize成员STARTF_USESHOWWINDOW //使用wShowWindow成员STARTF_USEPOSITION //使用dwX和dwY成员STARTF_USECOUNTCHARS //使用dwXCountChars和dwYCountChars成员STARTF_USEFILLATTRIBUTE //使用dwFillAttribute成员STARTF_USESTDHANDLES //使用hStdInput、hStdOutput和hStdError成员STARTF_RUN_FULLSCREEN //强制在x 8 6 计算机上运行的控制台应用程式以全萤幕幕方式启动运行另外还有两个标誌 , 即STARTF_FORCEONFEEDBACK和STARTF_+FORCEOFFF -EEDBACK  , 当启动一个新进程时 , 它们可以用来控制滑鼠的游标 。由于Windows支持真正的多任务抢占式运行方式 , 因此可以启动一个应用程式 , 然后在进程初始化时 , 使用另一个程式 。为了向用户提供直观的反馈信息 , C r e a t e P r o c e s s 能够临时将系统的箭头游标改为一个新游标 , 即沙漏箭头游标:该游标表示可以等待出现某种情况 , 也可以继续使用系统 。当启动另一个进程时 , CreateProcess函式使你能够更好地控制游标 。当设定STARTF_FORCEONFEEDBACK标誌时 , C r e a t e P r o c e s s 并不将游标改为沙漏 。STARTF_FORCEONFEEDBACK可使CreateProcess能够监控新进程的初始化 , 并可根据结果来改变游标 。当使用该标誌来调用CreateProcess时 , 游标改为沙漏 。过2 s 后 , 如果新进程没有调用G U I  , CreateProcess 将游标恢复为箭头 。如果该进程在2 s 内调用了GUI  , CreateProcess将等待该应用程式显示一个视窗 。这必须在进程调用G U I 后5 s内发生 。如果没有显示视窗 , CreateProcess就会恢复原来的游标 。如果显示了一个视窗 , CreateProcess将使沙漏游标继续保留5s。如果某个时候该应用程式调用了G e t M e s s a g e 函式 , 指明它完成了初始化 , 那幺C r e a t e P r o ce s s 就会立即恢复原来的游标 , 并且停止监控新进程 。在结束这一节内容的介绍之前 , 我想讲一讲S TA RT U P I N F O 的w S h o w Wi n d o w成员 。你将该成员初始化为传递给( w ) Wi n M a i n 的最后一个参数n C m d S h o w的值 。该成员显示你想要传递给新进程的( w ) Wi n M a i n 函式的最后一个参数n C m d S h o w的值 。它是可以传递给S h o w Wi n d o w 函式的标识符之一 。通常 , n C m d S h o w 的值既可以是S W _ SH O W N O R M A L  , 也可以是SW_ SHOWMINNOACTIVE。但是 , 它有时可以是S W _ S H O W D EFA U LT。当在E x p l o r e r 中启动一个应用程式时 , 该应用程式的( w ) Wi n M a i n 函式被调用 , 而S W _ SH O W N O R M A L 则作为n C m d S h o w参数来传递 。如果为该应用程式创建了一个捷径 , 可以使用捷径的属性页来告诉系统 , 应用程式的视窗最初应该如何显示 。图4 - 3 显示了运行No t e p a d 的捷径的属性页 。注意 , 使用R u n 选项的组合框 , 就能够设定如何显示N o t e p a d 的视窗 。当使用E x p l o r e r 来启动该捷径时 , E x p l o r e r 会正确地準备S TA RT U P I N FO 结构并调用C r e a t e P r o c e s s。这时N o t e p a d 开始运行 , 并且为n C m d S h ow 参数将S W _ S H O W M I N N O A C T I V E传递给它的( w ) Wi n M a i n 函式 。运用这样的方法 , 用户能够很容易地启动一个应用程式 , 其主视窗可以用正常状态、最小或最大状态进行显示 。最后 , 应用程式可以调用下面的函式 , 以便获取由父进程初始化的S TA RT U P I N F O 结构的拷贝 。子进程可以查看该结构 , 并根据该结构的成员的值来改变它的行为特性 。VOIDGetStartupInfo(LPSTARTUPINFO pStartupInfo);注意虽然Wi n d o w s 文档没有明确地说明 , 但是在调用G e t S t a r t I n f o 函式之前 , 必须像下面这样对该结构的c b 成员进行初始化:STARTUPINFO si = { sizeof(si) };GetStartupInfo(&si);其他编程易语言 ------------------------------.版本 2.数据类型 STARTUPINFO, , 启动信息 。.成员 cb, 整数型它可用作版本控制手段应用程式必须将cb初始化为sizeof(STARTUPINFO).成员 lpReserved, 整数型, , , PSTR lpReserved; //保留 。必须初始化为N U L L.成员 lpDesktop, 整数型.成员 lpTitle, 整数型.成员 dwX, 整数型, , ,.成员 dwY, 整数型, , , DWORD dwY; 只有当子进程用CW_USEDEFAULT作为CreateWindow的x参数来创建它的第一个重叠视窗时才使用这两个坐标 。.成员 dwXSize, 整数型, , ,.成员 dwYSize, 整数型, , ,.成员 dwXCountChars, 整数型, ,.成员 dwYCountChars, 整数型.成员 dwFillAttribute, 整数型, ,.成员 dwFlags, 整数型, , , STARTF_FORCEONFEEDBACK0x00000040;STARTF_FORCEOFFFEEDBACK0x00000080;STARTF_PREVENTPINNING0x00002000;STARTF_RUNFULLSCREEN0x00000020;STARTF_TITLEISAPPID0x00001000;STARTF_TITLEISLINKNAME0x00000800;STARTF_USECOUNTCHARS0x00000008;STARTF_USEFILLATTRIBUTE0x00000010;STARTF_USEHOTKEY0x00000200;STARTF_USEPOSITION0x00000004;STARTF_USESHOWWINDOW0x00000001;STARTF_USESIZE0x00000002;STARTF_USESTDHANDLES0x00000100.成员 wShowWindow, 短整数型, , , WORD wShowWindow; //用于设定如果子应用程式初次调用的S h o w Wi n d o w 将S W _ S H O W D E FA U LT 作为n C m d S h o w 参数传递时 , 该应用程式的第一个重叠视窗应该如何出现 。本成员可以是通常用于Show Wi n d o w 函式的任何一个S W _ *标识符.成员 cbReserved2, 短整数型, , , WORD cbReserved2; //保留 。必须被初始化为0.成员 lpReserved2, 整数型, , , PBYTE lpReserved2; //保留 。必须被初始化为N U L L.成员 hStdInput, 整数型, , 按照默认设定 , h S t d I n p u t 用于标识键盘快取.成员 hStdOutput, 整数型.成员 hStdError, 整数型