[转]STARTUPINFO解读--写得很详细

typedef struct _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;
} STARTUPINFO, *LPSTARTUPINFO;
当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将使沙漏光标继续保留5 s 。如果某个时候该应用程序调用了G e t M e s s a g e 函数,指明它完成了初始化,那么C r e a t e P r o c e 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 _ S H O W N O R M A L ,也可以是SW_ SHOWMINNOACTIVE 。但是,它有时可以是S W _ S H O W D E FA U LT 。

当在E x p l o r e r 中启动一个应用程序时,该应用程序的( w ) Wi n M a i n 函数被调用,而S W _ S H O W N O R M A L 则作为n C m d S h o w 参数来传递。如果为该应用程序创建了一个快捷方式,可以使用快捷方式的属性页来告诉系统,应用程序的窗口最初应该如何显示。图4 - 3 显示了运行N o 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 F O 结构并调用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 o w 参数将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);

E语言进程枚举模块源码解读 本文还有配套的精品资源,点击获取 简介:在系统级编程中,枚举进程模块对于理解进程使用情况至关重要。E语言作为一种功能强大的通用编程语言,允许底层操作的灵活性,本例程将解析如何使用E语言枚举进程中的模块。内容涵盖进程和模块概念、使用系统调用获取模块信息、解析模块信息、以及资源清理等步骤。通过学习这个例程,可以提升E语言编程技能和对操作系统级别编程的理解。 1. 进程... 阅读详情

相关推荐

C2000 ePWM与SDFM同步配置:从寄存器到Driverlib实战解析

在嵌入式实时控制系统中,脉宽调制(PWM)是实现电机驱动、数字电源等应用的核心技术,其信号质量和时序精度直接决定了系统性能。为实现精确控制,PWM信号常需与模数转换器(ADC)或Sigma-Delta滤波器(SDFM)的采样时刻严格同步,以消除开关噪声并获取准确的反馈信号。其技术原理在于通过硬件同步机制,将PWM的特定时间点(如周期中心)作为触发源,控制数据采集的启动时刻。这种硬件级同步能有效提升闭环控制的稳定性和动态响应速度,广泛应用于伺服驱动、变频器等高性能场景。本文聚焦于TI C2000系列微控制器,

weixin_33692284的博客 446

CreateProcessAsUser和CreateProcessWithLogonW的简单案列

介绍6种比较常用的运行(执行)程序的方法: 包括WinExec、ShellExecute、CreateProcess、CreateProcessAsUser、CreateProcessWithLogonW、CreateProcessWithTokenW 一、CreateProcessAsUser创建一个新进程及其主线程。 1、创建当前登录(活跃)用户下的进程 // pch.cpp: ...

qq_34227896的博客 2万+

霍尔安装歪了也能用?揭秘无感FOC中的‘霍尔自学习’黑科技,实现信号线自适应

本文揭秘了无感FOC中的‘霍尔自学习’黑科技,即使霍尔安装歪了或信号线接错,电机仍能平稳运转。该技术通过算法创新解决了传统霍尔方案的安装公差、接线容错和校准成本问题,显著提升了电机控制的可靠性和效率。文章详细解析了自学习算法的实现架构、关键技术及工程实践中的优化方案,展示了其在工业应用中的卓越性能。

weixin_28309571的博客 464

关于windows上的账号(权限)切换

这2年一直在做一个运维项目,如果你要在windwos上实现不同进程的权限切换,那么这篇文章会对你有用的! 最重要的函数CreateProcessWithLogonW 在UNIX平台上如果你要对一个进程降权有跟多办法,不管是su命令 还是python的os函数都可以很容易的达到目的。 但是在windwos上要降权就不是很容易了。基本原则就是高级权限切低级权限不需要密码,低级权限使用高级权限...

diandi7050的博客 1380

【matlab】使用alexnet进行特征提取

1.下载alexnet工具箱 在命令栏输入alexnet,若不报错说明已经安装,若出现错误按照提示去下载工具箱; 下载地址:https://ww2.mathworks.cn/matlabcentral/fileexchange/59133-deep-learning-toolbox-model-for-alexnet-network (1)需要先注册(十分简单),登陆,下载; (2)下载完成之后,...

jingjingliang1995的博客 5846

Verilog的综合指令

Synopsys综合指令

烟花一时的博客 5447

CreateProcessWithLogonW

Creates a new process and its primary thread. Then the new process runs the specified executable file in the security context of the specified credentials (user, domain, and password). It can optional...

weixin_34106122的博客 698

实战指南:用Python实现ONVIF WS-Discovery设备发现(附完整代码)

本文提供了一份详细的实战指南,介绍如何使用Python实现基于ONVIF标准的WS-Discovery设备发现协议。文章深入解析了协议原理、网络通信模型,并提供了完整的代码实现,帮助开发者快速构建智能安防和物联网应用中的设备自动发现工具,有效提升网络设备集成与管理的效率。

chair的专栏 1114

CreateProcessWithLogonW出现错误1058的解决方法

我们在用CreateProcessAsUserA、CreateProcessWithLogonW、CreateProcessWithTokenW函数编写程序时,经常会出现1058(无法启动服务,原因可能是已被禁用或与其相关联的设备没有启动)的错误,网上一搜,根本找不到相对应的解决方法,很是头痛,在此我就把我遇到后解决方法分享给大家。如果有更好的解决方法,欢迎拿砖拍我! 打开管理器,输入servi...

qq_34227896的博客 2975

Titans:谷歌新型神经记忆架构,突破 Transformer 长序列处理的瓶颈

Titans 是谷歌推出的新型神经网络架构,通过神经长期记忆模块突破 Transformer 在处理长序列数据时的瓶颈,支持并行计算,显著提升训练效率。

士多啤梨先生の博客 992

Allegro 给元器件PCB封装库添加3D模型详细步骤

从上面视图可以看到模型跟PCB 库的方向是对了,但是位置偏下,且在PCB封装库后面,我们下面需要做的就是把模型往上移、往前移。首先将元器件3D模型文件放在封装库的目录下(也可以单独新建一个模型库文件夹),注意3D文件必须是Step格式。Transparent: 选择透视的对象,可以是模型、也可以是PCB封装,或者两种都透视。在左边搜索要添加的3D模型的文件(注意是在* 星号前面输入文件名),按回车即可找到。同样的,接下来需要往Y 负方向移,即左移,一边调整一边观察视图。

sinat_15677011的博客 3685

startupinfo解读

typedef struct _STARTUPINFO {    DWORD cb;            //包含STARTUPINFO结构中的字节数.如果Microsoft将来扩展该结构,它可用作版本控制手段.                         应用程序必须将cb初始化为sizeof(STARTUPINFO)    PSTR lpReserved;      //保留。必

coredoor的专栏 971

ROS机器人未知环境自主探索功能包explore_lite最全源码详细解析(五)

本系列文章主要针对ROS机器人常使用的未知环境自主探索功能包explore_lite展开全源码的详细解析,并进行概括总结。 本系列文章共包含六篇文章,前五篇文章主要介绍explore_lite功能包中 explore.cpp、costmap_tools.h、frontier_search.cpp、costmap_client.cpp等源码实现文件中全部函数的详细介绍,第六篇文章进行概括总结,包含自主探索功能包explore_lite的简介,实现未知环境自主探索功能的原理及流程总结,效果演示,使用功能包exp

慕羽★的博客 1511

将一个EXE程序嵌入MFC运行

原文:http://www.codeproject.com/Articles/18724/Hosting-exe-applications-into-a-dialog HANDLE hProcess; HWND apphWnd = NULL; int CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam) { DWORD pID; ...

bmjhappy的专栏 1910

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

[转]WinExec、ShellExecute和CreateProcess及返回值判断方式

[转]WinExec、ShellExecute和CreateProcess及返回值判断方式   http://www.cnblogs.com/ziwuge/archive/2012/03/12/2392472.html 有三个API函数可以运行可执行文件WinExec、ShellExecute和CreateProcess。CreateProcess因为使用复杂,比较少用。 ...

afdd28617的博客 165

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

VC++进程管道重定向:原理、实现与多线程防死锁实战

进程间通信(IPC)是操作系统实现程序协作的核心机制,它允许不同进程安全地交换数据与控制信息。在Windows平台,匿名管道作为一种高效的IPC方式,通过在内存中创建单向或双向数据通道,实现了父子进程间的标准输入输出重定向。这项技术的核心价值在于,它使得父进程能够动态控制子进程的执行流,实时捕获其输出并发送指令,从而突破了传统system()函数“黑箱”执行的局限。在VC++开发中,结合CreatePipe、CreateProcess等Windows API以及多线程模型,开发者可以构建出稳定、高效的进程交

weixin_34034261的博客 341

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

startupinfo为什么需要初始化_面试官为什么总是问happens-before规则,看完这篇文章你就懂了...

本篇文章从happens-before定义、用途以及具体规则三个方面对happens-before进行解读,并通过源码案例深入了解为什么需要happens-before规则和什么是指令重排序。什么是happens-beforehappens-before: A happens-before B就是A先行发生于B(这种说法不是很准确),定义为hb(A, B)。在Java内存模型中,happens-b...

weixin_39898150的博客 82

CreateProcess函数详解

WIN32API函数CreateProcess用来创建一个新的进程和它的主线程,这个新进程运行指定的可执行文件。 函数原型: BOOL CreateProcess ( LPCTSTR lpApplicationName, LPTSTR lpCommandLine, LPSECURITY_ATTRIBUTES lpProcessAttributes, LPSECURITY_ATTRIBUTES lpThreadAttributes, BOOL bInheritHandles, DWORD dwCreat

顺其自然~专栏 1万+

利用匿名管道实现远程CMD---我的解读

利用匿名管道实现远程CMD 分类: C/C++2011-07-12 21:32 803人阅读 评论(0) 收藏 举报 // vctelnetserver.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include #incl

喵帕斯 ♬ 1551

进程间通信(4) 匿名管道

匿名管道没有名称,所以只能在父进程中调用CreateProcess函数创建子进程时,将管道的读、写句柄传递给子进程。 匿名管道只能实现本地机器上两个进程间的通信,而不能实现跨网络的通信。 1. 过程: a. createpipe得到hWrite和hRead两句柄 b. 将hWrite和hRead通过createprocess传递给子进程 c. 子进程通过GetStdHandle获取 hWrite和hRead d. 你读我写 read: char buf[100]; DWORD dwRead; .

thefist的专栏 377

window station , desktop 等概念学习

其实可以通过在MSDN查询HDESK来找到destop和window station等概念。 翻译MSDN的内容,大体的写了一些,可能有不正确的地方. 窗口站(window station): 包含剪贴板(clipboard),一个原子表,一个或多个桌面(desktop)对象.窗口站是一个保护对象,当一个窗口站被创建,它被分配到当前进程和当前会话(sessio

oldmtn的专栏 1230

熊猫烧香病毒源代码学习(只学习技术,破坏者责任自负)

program Japussy; uses Windows, SysUtils, Classes, Graphics, ShellAPI{, Registry}; const HeaderSize = 82432; //病毒体的大小 IconOffset = $12EB8; //PE文件主图标的偏移量 //在我的Delphi5...

weixin_30892037的博客 124

启动、关闭外部进程ShellExecute() 、CreateProcess()、TerminateProcess()、OpenProcess()==

学习用到了启动、关闭外部进程的知识,通过网上资料及自身实践作如下总结: 主要用到:ShellExecute() 、CreateProcess()、TerminateProcess()、OpenProcess()== 1.ShellExecute( hWnd: HWND; {指定父窗口句柄} Operation: PChar; {指定动作, 譬如: open、runas、pr

u010439291的专栏 1万+

c调用php,C++调用PHP

本文是对网络上现成代码的学习与解读!PHP是比较流行的脚本语言,WEB开发使用广泛,如何在C++程序中不依赖任何WEB SERVER调用PHP,并取得执行结果完成交互,这是本文代码所要实现的功能。PHP安装好后,在目录下有一个php-cgi.exe,我们只要执行这个CGI程序,并将数据通过命名管道传递给它,然后把执行结果通过命名管道读取出来即可,过程并不复杂!请看如下代码:命名管道的创建:SECU...

weixin_33542924的博客 485

c++6_ php 通信,C++调用PHP

本文是对网络上现成代码的学习与解读!PHP是比较流行的脚本语言,WEB开发使用广泛,如何在C++程序中不依赖任何WEB SERVER调用PHP,并取得执行结果完成交互,这是本文代码所要实现的功能。PHP安装好后,在目录下有一个php-cgi.exe,我们只要执行这个CGI程序,并将数据通过命名管道传递给它,然后把执行结果通过命名管道读取出来即可,过程并不复杂!请看如下代码:命名管道的创建:SECU...

weixin_30824361的博客 233
上一篇: 微软推出免费在线系统诊断工具--不用手动下载
下一篇: 深入认识Turbo C编译器
ardimo
博客等级 码龄18年 0粉丝 4原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值