WINDOWS API学习笔记之创建进程

#include<Windows.h>
#include<stdio.h>
DWORD CreateChildProcess(LPSTR szChildProcessCmd);
//这里对参数
int main()
{
    HANDLE hMainProcess;
    hMainProcess = GetCurrentProcess();
    printf("GetProcessId(hMainProcess):%d\n",GetProcessId(hMainProcess));
    printf("GetProcessIdOfThread(hMainProcess):%d\n",GetProcessIdOfThread(hMainProcess));
    printf("GetProcessVersion():%d\n",GetProcessVersion(GetProcessId(hMainProcess)));
    printf("主进程调用子进程前\n");
    CreateChildProcess("Child.exe");
    printf("主进程调用子进程后\n");

    system("pause");
    return 0;
}
//参数:LPSTR szChildProcessCmd  启动子进程的命令行
//返回值:成功返回0 失败返回1
DWORD CreateChildProcess(LPSTR szChildProcessCmd)
{
    STARTUPINFO si;
    PROCESS_INFORMATION pi;
    //将启动信息结构清零
    ZeroMemory(&si,sizeof(si));
    //设置结构大小
    si.cb = sizeof(si);
    //将进程信息结构清零
    ZeroMemory(&pi,sizeof(pi));
    //创建子进程并判断是否成功
    if(!CreateProcess(
        NULL,             //指向应用程序,若为空 则命令行不能为空
        szChildProcessCmd,//命令行
        NULL,             //不继承进程句柄
        NULL,             //不继承线程句柄
        FALSE,            //不继承句柄
        0,                //没有创建标志
        NULL,             //使用父进程环境变量
        NULL,             //使用父进程目录作为当前目录
        &si,              //STARTUPINFO结构
        &pi               //PROCESS_INFORMATION结构 用于保存相关信息
        ))
    {
        //创建失败
        printf("Create Process Failed:%d\n",GetLastError());
        return 1;
    }
    //创建成功后父进程会默认直接退出 这里等待子进程执行结束
    WaitForSingleObject(pi.hProcess,INFINITE);
    CloseHandle(pi.hProcess);
    CloseHandle(pi.hThread);
    return 0;

}

以下是子进程函数

#include<windows.h>
#include<stdio.h>
int main()
{   
    HANDLE hChildProcess;
    HANDLE hChildThread;
    printf("this is a child process\n");
    hChildProcess = GetCurrentProcess();
    //这里简单获取子进程的相关信息
    printf("GetProcessId(hChildProcess):%d\n",GetProcessId(hChildProcess));
    printf("GetProcessIdOfThread(hChildProcess):%d\n",GetProcessIdOfThread(hChildProcess));
    printf("GetProcessVersion():%d\n",GetProcessVersion(GetProcessId(hChildProcess)));
    //获取线程ID
    hChildThread=GetCurrentThread();
    printf("GetThreadId(hChildThread):%d\n",GetThreadId(hChildThread));
    printf("子进程结束\n");
    //子进程执行到这里会等待输入 主进程等待
    getchar();
    return 0;
}
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值