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

typedef struct _STARTUPINFOW {DWORD   cb; //startupinfo结构体大小LPWSTR  lpReserved;LPWSTR  lpDesktop;LPWSTR  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;
} STARTUPINFOW, *LPSTARTUPINFOW;
#ifdef UNICODE
typedef STARTUPINFOW STARTUPINFO;
typedef LPSTARTUPINFOW LPSTARTUPINFO;
#else
typedef STARTUPINFOA STARTUPINFO;
typedef LPSTARTUPINFOA LPSTARTUPINFO;
#endif // UNICODE

PROCESS_INFOMATION

typedef struct _PROCESS_INFORMATION {HANDLE hProcess; //进程句柄HANDLE hThread; //线程句柄DWORD dwProcessId; //进程号DWORD dwThreadId; //线程号
} PROCESS_INFORMATION, *PPROCESS_INFORMATION, *LPPROCESS_INFORMATION;

CreateProcess用来创建一个新的进程和它的主线程,这个新进程运行指定的可执行文件。

WINBASEAPI
BOOL
WINAPI
CreateProcess(__in_opt    LPCSTR lpApplicationName, //新建进程名__inout_opt LPSTR lpCommandLine, //命令行参数,记得在命令行参数前面加个空格__in_opt    LPSECURITY_ATTRIBUTES lpProcessAttributes, //进程安全属性,默认使用NULL__in_opt    LPSECURITY_ATTRIBUTES lpThreadAttributes, //参数决定的是线程是否被继承.通常置为NULL,默认为NULL__in        BOOL bInheritHandles, //是否继承__in        DWORD dwCreationFlags, //指定附加的、用来控制优先类和进程的创建的标志。__in_opt    LPVOID lpEnvironment, //指向一个新进程的环境块。如果此参数为空,新进程使用调用进程的环境。__in_opt    LPCSTR lpCurrentDirectory, //指向一个以NULL结尾的字符串,这个字符串用来指定子进程的工作路径。这个字符串必须是一个包含驱动器名的绝对路径。如果这个参数为空,新进程将使用与调用进程相同的驱动器和目录。这个选项是一个需要启动应用程序并指定它们的驱动器和工作目录的外壳程序的主要条件__in        LPSTARTUPINFO lpStartupInfo, //STARTUPINFO信息__out       LPPROCESS_INFORMATION lpProcessInformation //PROCESS_INFORMATION信息);//
// Process dwCreationFlag values
//#define DEBUG_PROCESS                     0x00000001 //如果这个标志被设置,调用进程将被当做一个调试程序,并且新进程会被当做被调试的进程。系统把被调试程序发生的所有调试事件通知给调试器
#define DEBUG_ONLY_THIS_PROCESS           0x00000002 //如果此标志没有被设置且调用进程正在被调试,新进程将成为调试调用进程的调试器的另一个调试对象。如果调用进程没有被调试,有关调试的行为就不会产生
#define CREATE_SUSPENDED                  0x00000004//新进程的主线程会以暂停的状态被创建,直到调用ResumeThread函数被调用时才运行
#define DETACHED_PROCESS                  0x00000008//对于控制台进程,新进程没有访问父进程控制台的权限。新进程可以通过AllocConsole函数自己创建一个新的控制台。这个标志不可以与CREATE_NEW_CONSOLE标志一起使用#define CREATE_NEW_CONSOLE                0x00000010 //新的进程将使用一个新的控制台,而不是继承父进程的控制台。这个标志不能与DETACHED_PROCESS标志一起使用
#define NORMAL_PRIORITY_CLASS             0x00000020
#define IDLE_PRIORITY_CLASS               0x00000040
#define HIGH_PRIORITY_CLASS               0x00000080#define REALTIME_PRIORITY_CLASS           0x00000100
#define CREATE_NEW_PROCESS_GROUP          0x00000200 //新进程将是一个进程树的根进程。进程树中的全部进程都是根进程的子进程。新进程树的用户标识符与这个进程的标识符是相同的,由lpProcessInformation参数返回。进程树经常使用GenerateConsoleCtrlEvent函数允许发送CTRL+C或CTRL+BREAK信号到一组控制台进程
#define CREATE_UNICODE_ENVIRONMENT        0x00000400//如果被设置,由lpEnvironment参数指定的环境块使用Unicode字符,如果为空,环境块使用ANSI字符
#define CREATE_SEPARATE_WOW_VDM           0x00000800//如果被设置,新进程将会在一个私有的虚拟DOS机(VDM)中运行。另外,默认情况下所有的16位Windows应用程序都会在同一个共享的VDM中以线程的方式运行。单独运行一个16位程序的优点是一个应用程序的崩溃只会结束这一个VDM的运行;其他那些在不同VDM中运行的程序会继续正常的运行。同样的,在不同VDM中运行的16位Windows应用程序拥有不同的输入队列,这意味着如果一个程序暂时失去响应,在独立的VDM中的应用程序能够继续获得输入。#define CREATE_SHARED_WOW_VDM             0x00001000 //如果WIN.INI中的Windows段的DefaultSeparateVDM选项被设置为真,这个标识使得CreateProcess函数越过这个选项并在共享的虚拟DOS机中运行新进程
#define CREATE_FORCEDOS                   0x00002000
#define BELOW_NORMAL_PRIORITY_CLASS       0x00004000
#define ABOVE_NORMAL_PRIORITY_CLASS       0x00008000#define INHERIT_PARENT_AFFINITY           0x00010000
#define INHERIT_CALLER_PRIORITY           0x00020000    // Deprecated
#define CREATE_PROTECTED_PROCESS          0x00040000
#define EXTENDED_STARTUPINFO_PRESENT      0x00080000#define PROCESS_MODE_BACKGROUND_BEGIN     0x00100000
#define PROCESS_MODE_BACKGROUND_END       0x00200000#define CREATE_BREAKAWAY_FROM_JOB         0x01000000
#define CREATE_PRESERVE_CODE_AUTHZ_LEVEL  0x02000000
#define CREATE_DEFAULT_ERROR_MODE         0x04000000 //的进程不继承调用进程的错误模式。CreateProcess函数赋予新进程当前的默认错误模式作为替代。应用程序可以调用SetErrorMode函数设置当前的默认错误模式
#define CREATE_NO_WINDOW                  0x08000000//系统不为新进程创建CUI窗口,使用该标志可以创建不含窗口的CUI程序#define PROFILE_USER                      0x10000000
#define PROFILE_KERNEL                    0x20000000
#define PROFILE_SERVER                    0x40000000
#define CREATE_IGNORE_SYSTEM_DEFAULT      0x80000000

ExitProcess

WINBASEAPI
DECLSPEC_NORETURN
VOID
WINAPI
ExitProcess(
__in UINT uExitCode //该进程和所有线程的退出代码
);

GetProcessCode 获得进行退出码的函数

WINBASEAPI
BOOL
WINAPI
GetExitCodeProcess(
__in  HANDLE hProcess, //进程句柄
__out LPDWORD lpExitCode //进程退出码
);

TerminateProcess结束指定进程

WINBASEAPI
BOOL
WINAPI
TerminateProcess(
__in HANDLE hProcess, //进行句柄
__in UINT uExitCode  //退出代码);

GetCommandLine获得命令行参数

WINBASEAPI
__out
LPSTR
WINAPI
GetCommandLine(VOID);

返回值为字符串地址

GetCurrentProcessId获取当前进程一个唯一的标识符
GetCurrentProcess获得当前进程 的句柄

WINBASEAPI
__out
HANDLE
WINAPI
GetCurrentProcess(VOID);WINBASEAPI
DWORD
WINAPI
GetCurrentProcessId(VOID);

58.创建线程CreateProcess、STARTUPINFO、PROCESS_INFORMATION、ExitProcess、TerminateProcess、GetCommandLine、Get相关推荐

  1. 创建进程CreateProcess,结束进程 TerminateProcess

    相关函数可以参考MFC帮助文档: class CExeCommandLine { public: CExeCommandLine() { ZeroMemory( &m_si, sizeof(m ...

  2. VC创建进程CreateProcess的方法

    本文实例讲述了VC创建进程CreateProcess的方法.分享给大家供大家参考.具体实现方法如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 ...

  3. 【并发编程二】c++创建子进程CreateProcess()

    [并发编程二]c++创建子进程CreateProcess() 一.创建子进程 二.demo 三.构建.编译.运行 四.相关知识介绍 1.CreateProcess 参数介绍 1.1.lpApplica ...

  4. 【Android NDK 开发】JNI 线程 ( JNI 线程创建 | 线程执行函数 | 非 JNI 方法获取 JNIEnv 与 Java 对象 | 线程获取 JNIEnv | 全局变量设置 )

    文章目录 I . JNI 线程创建 II . 线程执行函数 III . 线程方法获取 Java 对象 IV . 线程方法获取 JNIEnv V . JNI 线程 完整代码示例 I . JNI 线程创建 ...

  5. 29-30Python多线程、多线程、使用threading模块创建线程;JSON数据解析、编码为JSON类型转换对应表、Python类型转换对应表、json.dumps与json.loads

    29Python3多线程 多线程类似于同时执行多个不同程序,多线程运行有如下优点: 使用线程可以把占据长时间的程序中的任务放到后台去处理. 用户界面可以更加吸引人,比如用户点击了一个按钮去触发某些 ...

  6. 使用线程——创建线程

    CreateThread函数创建一个进程的新的线程.创建线程必须指定新线程要执行的代码的起始地址.通常,起始地址是程序代码中定义的函数的名称(有关更多信息,请参阅ThreadProc).此函数采用单个 ...

  7. 创建线程的函数CreateThread

    主线程的进入点函数的名字必须是main.main.WinMain或wWinMain,其它线程必须用不同的名字 主线程的进入点函数传递了字符串参数,因此可以使用 ANSI/Unicode版本的进入点函数 ...

  8. _beginthread和CreateThread 创建线程

    建立一个线程. unsigned long beginthread(void(cdecl *startaddress)(void*),unsigned stacksize, void *arglist ...

  9. c语言createthread函数,C++中CreateThread函数创建线程的用法和实例

    CreateThread是一种微软在Windows API中提供了建立新的线程的函数,该函数在主线程的基础上创建一个新线程.线程终止运行后,线程对象仍然在系统中,必须通过CloseHandle函数来关 ...

最新文章

  1. 【Qt】Qt动态库和静态库的创建和使用
  2. R语言ggplot2可视化:使用热力图可视化dataframe数据、自定义设置热力图的颜色、自定添加标题、轴标签、热力图线框等
  3. 多媒体开发之--- live555 vs2010/vs2013下编译,使用,测试
  4. 高朋F团QQ团 三品牌合力激战团购市场
  5. python软件开发目录_软件开发目录规范
  6. Magento Block设计分析(深入分析)
  7. Mybatis-Plus基本
  8. 计算一个人出生了多少天(炸窝)
  9. java 含有package cmd_如何在命令提示符下编译运行含有Package的java文件
  10. 网络流之P3254 圆桌问题
  11. 计算机网络技术知识点
  12. 装了冰点还原如何修改计算机ip,冰点还原软件如何使用
  13. YY0709标准解读
  14. 实时互联网的隐形风口
  15. gta5结局杀老崔我哭了_GTA5:每个主角都在故事里得到了自己想要的东西,但崔佛却是白给...
  16. 不同手机型号图文预览_各种手机型号的查询方法(国外英文资料).doc
  17. abp viewmodel的写法
  18. SAP FI系统配置-应收应付
  19. 高动态卫星DSSS信号Turbo迭代捕获算法
  20. 自动化测试的一些面试题分享

热门文章

  1. 大陆人能否在香港外资银行开户?
  2. 运算符号“?”的运用
  3. SpringBoot:文件下载、pdf预览、文件压缩
  4. 如何自定义您的SaaS ERP解决方案
  5. 流媒体技术知识梳理整合
  6. TCP 如何保证可靠性
  7. 压缩包太大导致的部署问题
  8. 为什么现在有些研究生想退学?
  9. php 配置 memcache,php如何配置memcache
  10. 关键词SEO排名优化的对策与流程