zoukankan      html  css  js  c++  java
  • MFC 记录 CreateProcess启动外部游戏主程序

    CreateProcess 为WindowsApi函数,用来创建一个新的进程,这个新进程可以运行指定的可执行文件!

    函数原型

    BOOL CreateProcess
    (
    LPCTSTR lpApplicationName,//参数1.应用程序的名称,绝对路径,也可以是相对路径,可为NULL,若为NULL,则执行lpCommandLine
    LPTSTR lpCommandLine,<span style="white-space:pre">    </span>  //参数2.命令行参数,可为NULL,一般为应用程序传参,若为NULL,函数则使用 lpApplicationName字符串为运行命令行
    LPSECURITY_ATTRIBUTES lpProcessAttributes,//参数3.进程的属性,指向一个SECURITY_ATTRIBUTES结构,结构体决定返回的句柄是否被子进程继承,一般为NULL
    LPSECURITY_ATTRIBUTES lpThreadAttributes, //参数4.线程的属性,同参数3.但是这个参数决定的是 线程 是否被继承,一般为NULL
    BOOL bInheritHandles, // 参数5.是否继承父进程的属性,TRUE\FALSE ,一般为FALSE ,若为TRUE 进程中每个可被继承的打开句柄都被继承,被继承者有相同的值和访问权限
    DWORD dwCreationFlags, //参数6.标志位信息,参数太多,具体见MSDN,或者百度百科,一般默认为 0
    LPVOID lpEnvironment,  //参数7.环境变量,指向新进程的环境块,一般为NULL,为NULL则新进程使用调用进程的环境
    LPCTSTR lpCurrentDirectory, //参数8.程序当前目录,为指定子进程的工作路径,如果是启动Exe程序,则为应用程序坐在的目录
    LPSTARTUPINFO lpStartupInfo, //参数9.传给新进程的信息,指向新进程主窗口如何显示的STARUPINFO 结构体
    LPPROCESS_INFORMATIONlpProcessInformation //参数10.进程返回的信息,用来接收新进程识别信息的PROCESS_INFORMATION结构体
    );

    以上为函数原型, 下面为例子调用

    <span style="white-space:pre">    </span>STARTUPINFO si;
        PROCESS_INFORMATION pi;
        ZeroMemory(&si, sizeof(si));
        si.cb = sizeof(si);
    
        CString chPath,strTmp;
        TCHAR CmdLine[260];
        TCHAR FileName[260];
        TCHAR Directory[260];
        
        chPath ="C:\\Game\\update\\";
        _stprintf(FileName, _T("%sgame.exe"), chPath);
        _stprintf(Directory, _T(chPath));
        _stprintf(CmdLine, _T("-debug"));
        if (!CreateProcess(FileName, CmdLine, NULL, NULL, FALSE, 0, NULL, Directory, &si, &pi))
        {
            strTmp.Format("启动游戏失败,代码: %d", GetLastError());
            AfxMessageBox(strTmp);
            return;
        }
        //等待进程关闭
        WaitForSingleObject(pi.hProcess, INFINITE);
        //关闭进程和线程句柄
        CloseHandle(pi.hProcess);
        CloseHandle(pi.hThread);
    刚开始测试的时候, 使用程序获得配置文件里游戏路径,总是错误, 一般出现错误码  为 2, 5, 267等, 
     
    比较容易忽略的地方为:
    lpApplicationName 执行的Exe程序的路径以及程序,
    lpCommandLine 向启动程序传参,
    lpCurrentDirectory 被启动程序当前目录
  • 相关阅读:
    简单的模板解析函数
    HTML通过事件传递参数到js 二 event
    HTML通过事件传递参数到js一
    通过this获取当前点击选项相关数据
    LeetCode 20. 有效的括号(Valid Parentheses)
    LeetCode 459. 重复的子字符串(Repeated Substring Pattern)
    LeetCode 14. 最长公共前缀(Longest Common Prefix)
    LeetCode 168. Excel表列名称(Excel Sheet Column Title)
    LeetCode 171. Excel表列序号(Excel Sheet Column Number) 22
    LeetCode 665. 非递减数列(Non-decreasing Array)
  • 原文地址:https://www.cnblogs.com/callback/p/4247950.html
Copyright © 2011-2022 走看看