①、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 函数其他参数如何来使用!
 

最新文章

  1. Jquery中ajax方法data参数的用法
  2. 使用MJRefresh遇到的一个问题,上拉刷新后tableview瞬间滑到最底部
  3. Spring - 配置Bean - 自动装配 关系 作用域 引用外部属性文件
  4. 使用Redis来实现LBS的应用
  5. Azure HDInsight HBase DR解决方案
  6. JZ2440开发笔记(1)——arm-linux-gcc环境搭建
  7. python cmd模块练习
  8. linux监控脚本
  9. QML性能
  10. springMVC3学习(一)--框架搭建
  11. 200行Python代码实现2048
  12. QPalette
  13. Xshell5一打开就提示要使用该程序,请更新至最新版本
  14. 如何理解MVC?
  15. Activity切换的时候生命周期的变化
  16. 基于Verilog的串口发送程序
  17. C#JSON与XML转换
  18. Scala学习(一)--Scala基础学习
  19. MAC系统压缩文件传到WINDOWS下出现乱码
  20. VS Code 如何直接在浏览器中预览页面

热门文章

  1. 【.NET】SqlDateTime 溢出。必须介于 1/1/1753 12:00:00 AM 和 12/31/9999 11:59:59 PM之间
  2. SpringSecurity3Demo【原】
  3. 细说tomcat之应用监控
  4. Android SVN上传项目
  5. Reshaper安装后vs快捷键不起作用
  6. Groovy 设计模式 -- null对象模式
  7. Javaweb学习笔记——(二十一)——————过滤器
  8. ubuntu18.04中安装和卸载cuDNN
  9. oracle 重建索引以及导出所有的索引脚本(可以解决还原数据库文件时先还原数据,在重新用脚本创建索引)
  10. Unsupervised Domain Adaptation Via Domain Adversarial Training For Speaker Recognition