MFC中新建窗口(程序自己启动自己)相关函数的使用方法

MFC中新建窗口(程序自己启动自己)相关函数的使用方法
   a. 首先建立一个基于对话框的MFC应用。(相关过程略)
   b. 在对话框上添加按钮或下拉菜单资源,然后添加处理程序,处理程序的类选择主窗口类,再在处理程序中加上一行程序即可完成新建窗口的创建:
       WinExec(AfxGetApp()->m_pszExeName, SW_SHOW);
       参数1 通过AfxGetApp()获得的当前进程的可执行程序名字
       参数2 SW_SHOW表示以当前大小激活运行后的程序窗口并显示它
       用WinExec这个函数创建新建窗口,代码简单,易于使用。但对于这个函数VS虽不报错,但经常提示应该使用CreateProcess函数。

   c. 使用CreateProcess函数创建新建窗口举例:
      PROCESS_INFORMATION   info; 
      //CreateProcess函数参数之一,一个结构体,用于新建进程存放与进程、线程相关的句柄、进程或线程ID号等
      STARTUPINFO startup; 
      //也是CreateProcess函数参数,也是一个结构体,存有创建新进程需要的一些信息
      char szPath[128]; //字符型数组,用于存放程序的路径及文件名,作为参数传入CreateProcess
      char* szCmdLine; //字符型指针变量,用于存放命令行参数,作为参数传入CreateProcess
      GetModuleFileName(AfxGetApp()->m_hInstance, szPath, sizeof(szPath));
      //通过GetModuleFileName函数获得当前进程的路径及文件名保存到szPath中;
      szCmdLine = GetCommandLine();
      //通过GetCommandLine()获得当前进程命令行参数并保存到szCmdLine中;
      GetStartupInfo(&startup); 
      //通过GetStartupInfo函数获得当前进程的启动信息并保存到startup中。
      CreateProcess(szPath, szCmdLine, NULL, NULL,FALSE, NORMAL_PRIORITY_CLASS, NULL, NULL, &startup, &info);
          //参1 应用程序路径及名称
          //参2 命令行信息
          //参3 进程的安全属性,可以为空
          //参4 线程的安全属性,可以为空
          //参5 是否继承父进程的属性
          //参6 创建标志
          //参7 指向新的环境块的指针,可以为空
          //参8 指向当前目录名的指针,可以为空
          //参9 传递给新进程的信息
          //参10 新进程返回的信息
          本来创建新建窗口(新进程)的工作至此已经可以结束,程序已能正常运行,但VS总是提醒存在句柄信息泄露,为此需要再加上下面这三个语句:
          WaitForSingleObject(info.hProcess, INFINITE);  //等待新建进程结束
          CloseHandle(info.hProcess); //关闭进程句柄
          CloseHandle(info.hThread); //关闭相关线程句柄
          形式上看,使用CreateProcess创建新窗口,比WinExec要复杂一些。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值