①、ShellExecute 进行进程的创建,属于 shell api:
//int iRet = (int)ShellExecute(m_hWnd, _T("open"), _T("NOTEPAD.EXE"), _T("C:\\123.txt"), NULL, SW_SHOW);
int iRet = (int)ShellExecute(m_hWnd, _T("open"), _T("C:\\WINDOWS\\NOTEPAD.EXE"), _T("C:\\123.txt"), NULL, SW_SHOW);
if (iRet > 32){
 MessageBox(_T("执行成功!"));
}else{
 MessageBox(_T("执行失败!"));
}
 
备注:ShellExecute 函数不仅可以打开文件,还可以打开网址等东西!
第三个文件参数可以不指定,这样系统会根据第三个参数传进来的文件类型找到关联的文件进行打开操作!
 
②、16位系统常用的 WinExec API 函数进行进程的创建,在32位系统中为了向下兼容,所以也是支持的!
WinExec 使用起来也比较简单,只有两个参数!一定要注意第一个参数的类型是:LPCSTR
 
int iRet = 0;
char *szPath = "C:\\WINDOWS\\NOTEPAD.EXE";
//char *szPath = "C:\\123.txt";
//char *szPath = "C:\\WINDOWS\\NOTEPAD.EXE C:\\123.txt";
iRet = WinExec(szPath, SW_SHOW);
if (iRet > 31){
 MessageBox(_T("执行成功!"));
}else{
 MessageBox(_T("执行失败!"));
}
 
③、标准 API 函数 CreateProcess 进行进程的创建:
虽然参数很多,但有很多参数都可以置成 NULL
注意:第二个参数的类型是 LPTSTR,没有C,也就不是 const 类型,所以表示该参数是可读写的!
 
TCHAR szPath[] = _T("C:\\WINDOWS\\NOTEPAD.EXE C:\\123.txt");
 
STARTUPINFO si = {0};
si.cb = sizeof(si);
PROCESS_INFORMATION pi = {0};
CreateProcess(NULL, szPath, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);
//CreateProcess(NULL, _T("C:\\WINDOWS\\NOTEPAD.EXE C:\\123.txt"), NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi); //执行错误
CloseHandle(pi.hThread);
CloseHandle(pi.hProcess);
 
关于 CreateProcess 函数其他参数的详细解释,见:CreateProcess中文详解.txt
 
④、进程的结束之:ExitProcess
结束自身进程:ExitProcess(0);
 
⑤、进程的结束之:TerminateProcess
结束自身或者其他进程:TerminateProcess(GetCurrentProcess(), 0);
结束其他进程时,要获得对方进程的进程句柄,同时有 PROCESS_TERMINATE 权限才可以!
TerminateProcess 是用一种“很黄很暴力”的方法去结束指定的进程,目标进程的资源没有及时被释放,虽然操作系统会帮助我们释放,但不是一个好的做法!
 
 
1、查找相关资料看看 ShellExecuteEx 函数的使用方法;
2、参照《CreateProcess中文详解.txt》学会 CreateProcess 函数其他参数如何来使用!
 

vc++基础班[26]---进程的相关操作的更多相关文章

  1. vc++基础班[24]---系统各种路径信息的获取

    vc++基础班[24]---系统各种路径信息的获取 ------------------------------------------ Begin ------------------------- ...

  2. vc++基础班[25]---系统信息的获取

    --------------------------------------------------------------------------- VC 驿站 WwW.CcTry.CoM 多抽出一 ...

  3. vc++基础班[27]---实现一个简单的任务管理器

      因为任务管理器中涉及到进程的枚举操作,所以把两节课的知识点合并到一起来讲!   ①.设计界面.以及列表控件变量的绑定: ②.列表控件样式的指定: m_TaskList.SetExtendedSty ...

  4. python基础===【字符串】所有相关操作

    #字符串的相关操作 #基本操作 #+ 字符串连接操作 str1 = '来是come走是go' str2 = '点头yes摇头no' result = str1 + str2 print(result) ...

  5. vc++基础班[23]---文件夹的基本操作

      ①.文件夹的创建:CreateDirectory ※※※ 注意:此函数只能创建一层目录,比如想在 C 盘下的 Temp 目录下创建新目录为:123 那么前提是 Temp 这个目录存在才可以!   ...

  6. vc++基础班[21]---文件的基本操作之CFile

    ①.文件的创建.打开.关闭: 文件的创建.打开:CFile::Open 文件的关闭:CFile::Close   CFile::modeCreate:以新建方式打开,如果文件不存在,则新建:如果文件已 ...

  7. vc++基础班[28]---动态数组及动态链表的讲解

    C++中也有相应的动态数组.动态链表.映射表的模板类,就是STL中的:vector.list.map 他们属于C++标准中的一部分,对于程序的移植性来说也是不错的,但是在MFC编程中使用 CArray ...

  8. vc++基础班[22]---文件的基本操作2

      MFC 中的 CFile 及其派生类中没有提供直接进行文件的复制操作,因而要借助于SDK API: SDK中的文件相关函数常用的有CopyFile().CreateDirectory().Dele ...

  9. 架构师养成记--26.vi/vim相关操作

    vi/vim命令模式插入模式 aio编辑模式 : aio就是vi/vim的插入模式命令    作用a         在光标后附加文本A         在本行末附加文本i         在光标钱插 ...

随机推荐

  1. mysql的定时任务

    参考博客:https://blog.csdn.net/qq_26562641/article/details/53301407 查看event是否开启: show variables like '%s ...

  2. spring-data-redis时效设置

    本人转自http://hbxflihua.iteye.com/blog/2320584#bc2396403 spring目前在@Cacheable和@CacheEvict等注解上不支持缓存时效设置,只 ...

  3. Process和ProcessBuilder入门【原】

    ProcessBuilder优点 ProcessBuilder(XXX).start()和Runtime.exec(XXX)功能相同,主要优点在使用过程中感受有: 前者是jdk1.5后的新方式 配置环 ...

  4. 标签中的onclick调用js方法传递多个参数的解决方案

    1.JS方法 <script type="text/javascript"> funcation cc(parameter1,parameter2,parameter3 ...

  5. Arrays.asList() 的使用注意

    Sometimes it is needed to convert a Java array to List or Collection because the latter is a more po ...

  6. openstack服务启动之nova-compute

    在openstack中,消息的传递一共有两种方式,分别是:服务之间的传递调用Restful api,服务中模块之间的传递使用消息队列.每一个模块在启动是都会启动消息队列,等待队列中的有消息到来.所以模 ...

  7. vue使用vue-awesome-swiper及一些问题

    vue-awesome-swiper是基于swiper的一个轮播图插件,使用非常方便. 首先安装下 npm install vue-awesome-swiper --save 然后在入口文件main. ...

  8. 自学python 6.

    内容:id() is == 编码 解码1.好声音选秀比赛评委在打分的时候可以进行输入. 假设有10个评委.让10个评委进行打分, 要求, 分数必须大于5分, 小于10分.count = 1while ...

  9. kudu系列: Java API使用和效率测试

    Kudu+Impala很适合数据分析, 但直接使用Insert values语句往Kudu表插入数据, 效率实在不好, 测试下来insert的速度仅为80笔/秒. 原因也是显然的, Kudu本身写入效 ...

  10. DevExpress 之 GridControl 自定义列

    Ø  前言 DevExpress 控件大家应该都有所了解,使用这个框架实现B/S或C/S的,都是非常出色的.本文主要讨论下 GridControl 中如何[自定义列]或[计算列],可使用以下两种方法实 ...