1.结构原型

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;

2.参数说明

STARTUPINFO结构 该结构用于指定新进程的主窗口特性 

  DWORD cb; //包含STARTUPINFO结构中的字节数.如果Microsoft将来扩展该结构,它可用作版本控制手段.

  应用程序必须将cb初始化为sizeof(STARTUPINFO)

  PSTR lpReserved; //保留。必须初始化为N U L L

  PSTR lpDesktop; //用于标识启动应用程序所在的桌面的名字。如果该桌面存在,新进程便与指定的桌面相关联。

  如果桌面不存在,便创建一个带有默认属性的桌面,并使用为新进程指定的名字。

  如果lpDesktop是NULL(这是最常见的情况),那么该进程将与当前桌面相关联

  PSTR lpTitle; //用于设定控制台窗口的名称。如果l p Ti t l e 是N U L L ,则可执行文件的名字将用作窗口名

  DWORD dwX; //用于设定应用程序窗口在屏幕上应该放置的位置的x 和y 坐标(以像素为单位)。

  DWORD dwY; 只有当子进程用CW_USEDEFAULT作为CreateWindow的x参数来创建它的第一个重叠窗口时,

  才使用这两个坐标。若是创建控制台窗口的应用程序,这些成员用于指明控制台窗口的左上角

  DWORD dwXSize; //用于设定应用程序窗口的宽度和长度(以像素为单位)只有dwYsize

  DWORD dwYSize; 当子进程将C W _ U S E D E FA U LT 用作C r e a t e Wi n d o w 的

  n Wi d t h参数来创建它的第一个重叠窗口时,才使用这些值。

  若是创建控制台窗口的应用程序,这些成员将用于指明控制台窗口的宽度

  DWORD dwXCountChars; //用于设定子应用程序的控制台窗口的宽度和高度(以字符为单位)

  DWORD dwYCountChars;

  DWORD dwFillAttribute; //用于设定子应用程序的控制台窗口使用的文本和背景颜色

  DWORD dwFlags; //请参见下一段和表4 - 7 的说明

  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 _ *标识符

  WORD cbReserved2; //保留。必须被初始化为0

  PBYTE lpReserved2; //保留。必须被初始化为N U L L

  HANDLE hStdInput; //用于设定供控制台输入和输出用的缓存的句柄。

  按照默认设置,h S t d I n p u t 用于标识键盘缓存,

  h S t d O u t p u t 和h S t d E r r o r用于标识控制台窗口的缓存

  HANDLE hStdOutput;

  HANDLE hStdError;

  当Wi n d o w s 创建新进程时,它将使用该结构的有关成员。大多数应用程序将要求生成的应用程序仅仅使用默认值。至少应该将该结构中的所有成员初始化为零,然后将c b 成员设置为该结构的大小:

  STARTUPINFO si = { sizeof(si) };

  CreateProcess(...,&si,...);

  表4-7 dwFlags 使用标志及含义

  标志 含义

  STARTF_USESIZE // 使用d w X S i z e 和d w Y S i z e 成员

  STARTF_USESHOWWINDOW //使用w S h o w Wi n d o w 成员

  STARTF_USEPOSITION //使用d w X 和d w Y 成员

  STARTF_USECOUNTCHARS //使用d w X C o u n t C h a r s 和dwYCount Chars 成员

  STARTF_USEFILLATTRIBUTE //使用d w F i l l A t t r i b u t e 成员

  STARTF_USESTDHANDLES //使用h S t d I n p u t 、h S t d O u t p u t 和h S t d E r r o r 成员

  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 结构的拷贝。子进程可以查看该结构,并根据该结构的成员的值来改变它的行为特性。

  VOID GetStartupInfo(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);

STARTUPINFO结构相关推荐

  1. 58.创建线程CreateProcess、STARTUPINFO、PROCESS_INFORMATION、ExitProcess、TerminateProcess、GetCommandLine、Get

    STARTUPINFO用于指定新进程的主窗口特性的一个结构 typedef struct _STARTUPINFOW {DWORD cb; //startupinfo结构体大小LPWSTR lpRes ...

  2. Windows下创建进程简介

    正在执行的应用程序称为进程,进程不仅仅是指令和数据,它还有状态.状态是保存在处理器寄存器中的一组值,如当前执行指令的地址.保存在内存中的值,以及唯一定义进程在任一时刻任务的所有其他值.进程与应用程序的 ...

  3. 8、进程通信-匿名管道

    匿名管道 一个单向,未命名的管道,通常用来在一个父进程和一个子进程间传输数据.只能实现本地机器上两个进程间的通信,而不能实现跨网络的通信. BOOL CreatePipe( PHANDLE hRead ...

  4. 开源wkhtmltopdf使用心得 (二)

    一,wkhtmltopdf使用 a. 下载wkhtmltopdf安装包:(本人仅在win7 32位上使用) http://download.gna.org/wkhtmltopdf/0.12/ 根据系统 ...

  5. Stream、WshShell、WshUrlShortcut对象及Shell.Application的参数与使用

    1.Stream对象 组件:"Adodb.Stream"  有下列方法:  Cancel 方法  使用方法如下  Object.Cancel  说明:取消执行挂起的异步 Execu ...

  6. Windows程序设计零基础自学_7_进程操作

    哈哈, 今天看书看到了内核对象的进程一章,原来以为进程会很难,结果发现如果用心学习的话 其实也不是很难.嘻嘻我指的不难是入门不难,但是要是要完全掌握甚至精通的话还是相当的有难度的,光 那些什么内核对象 ...

  7. Wince 启动程序并最小化

    为什么80%的码农都做不了架构师?>>>    [DllImport("coredll.dll", EntryPoint = "ShowWindow&q ...

  8. MFC的进程和线程,非正常终止

    进程是一个可执行的程序,由私有虚拟地址空间.代码.数据和其他操作系统资源(如进程创建的文件.管道.同步对象等)组成.一个应用程序可以有一个或多个进程,一个进程可以有一个或多个线程,其中一个是主线程. ...

  9. Delphi 调用外部程序并等待其运行结束

    如何让Delphi调用外部程序并等待其运行结束 函数一: uses Windows, SysUtils, Classes, ShellAPI; function RunAndWait(FileName ...

最新文章

  1. Could not GET “XXXXX.xml”Received status code 400
  2. linux gstack pstack 进程运行堆栈查看工具
  3. js --- for in 和 for of
  4. Tkinter的Scrollba组件
  5. 二叉树的三叉链表实现c语言,数据结构:二叉树的三叉链表存储--Java实现
  6. 国内外免费电子书(数学、算法、图像、深度学习、机器学习)
  7. putty 远程linux桌面,Linux远程桌面工具Xming+Putty的搭建
  8. 金融系统中正确的金额计算及存储方式
  9. 【渝粤题库】陕西师范大学152212 政府绩效管理 作业(专升本)
  10. nls_lang.sh: 114: [[: not found
  11. 5 操作系统第二章 进程管理 线程介绍
  12. 函数别名c语言,C最佳实践 – 函数类型别名std :: function或T.
  13. lnmp 虚拟主机的配置
  14. 荐书丨被Dubbo虐过吗,反击开始!——《深入理解Apache Dubbo与实战》
  15. 【一天一个C++小知识】008.内联函数
  16. CISSP第一章:安全与风险管理知识点
  17. 【转载】微信小程序中引入iconfont阿里矢量图库
  18. 目前可用的微博秀的嵌入方法大全(亲测2019年2月仍有效) 1
  19. 智能分数计算机在线使用,作业帮智能计算器在线使用
  20. 父类与子类的执行顺序

热门文章

  1. 计算机工作原理 仿真,虚拟DCS仿真工作原理
  2. java8 filter return_java8新特性Java 8 Streams filter示例 - Java教程
  3. 程序员赚钱资源汇总,结合自己亲身经历
  4. 教你玩转CSS 精灵图/雪碧图
  5. 解决Pycharm窗口一闪而过的问题
  6. win10修改服务器地址,win10 修改服务器地址
  7. 计算机英语女人英语怎么说,英语时差:计算机和女人
  8. jpanel把原本内容覆盖掉_A5:APP关键词覆盖你该了解哪些
  9. json-schema 可视化编辑器发布了
  10. upload file more than 4MB