开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 1933|回复: 8
收起左侧

[其它] 启动和结束进程

[复制链接]

结帖率:100% (11/11)
发表于 2013-8-3 09:53:09 | 显示全部楼层 |阅读模式   河北省衡水市
本帖最后由 小白兔° 于 2013-8-3 09:54 编辑

这里我再次说明一下,我不知道为什么,现在的人那么喜欢走极端,估计是价值观都“升级”了的 缘故吧。我撰写这一系列Win32相关的文章,并不是叫大家一定要用Win32去开发项目,仅仅是 给大家了解一下,Win32是个啥东西而已。另外,在专访中,有些人也误认为我说C++非学不可 ,那也不是,我也提到过了,C++的学习可以使你懂得更多知识,为你以为学习各种技术打下基础。今天,我们来了解一下,在应用程序中,如何启动一个进程,然后把这个进程结束掉。实现这 一功能有替代方案,即使用.NET库中的System::Diagnostics::Process类来完成。在Win32中,启动一 个进程可以理解为创建进程,所以可以调用CreateProcess函数,结束进程则调用TerminateProcess函 数。唯一标识一个进程的是PID,而我们要对进程进行各项操作,进程也存在于内存中,也可以 视为一种资源,我们知识,操作图标资源有HICON,操作位图资源有HBITMAP,同样道理,对进程所作的 操作也要通过一个标识符(句柄)——HANDLE。CreateProcess函数的最后一个参数是一个指向 PROCESS_INFORMATION结构体的指针,该结构的成员可以保存被创建进程的ID和句柄。

  1. typedef struct _PROCESS_INFORMATION {     
  2.     HANDLE hProcess; //进程的句柄     
  3.     HANDLE hThread; //主线程的句柄     
  4.     DWORD dwProcessId; //进程ID     
  5.     DWORD dwThreadId; //主线程ID     
  6. } PROCESS_INFORMATION, *PPROCESS_INFORMATION, *LPPROCESS_INFORMATION;
复制代码
接下来我们要 对已创建进程进行的一系列操作,都以hProcess为纽带,包括获取退出码和终止进程。CreateProcess函数的最后两个参数都是指针,因此我们在使用时,要先定义STARTUPINFO和 PROCESS_INFORMATION类型的变量,并使用ZeroMemory函数将其成员初始化。ZeroMemory函数可以将一 段内存中的数据初始化为0.示例代码如下:
  1. PROCESS_INFORMATION pro_info; //进程

  2. 信息     
  3. STARTUPINFO sti; //启动信息     
  4. //......     
  5. // 初始化两个结构体     
  6. ZeroMemory(&pro_info, sizeof(PROCESS_INFORMATION));     
  7. ZeroMemory(&sti, sizeof(STARTUPINFO));
复制代码
接着调用CreateProcess创建进程.
  1. CreateProcess(L"C:\\Windows\\System32

  2. \\calc.exe",NULL,NULL,NULL,FALSE,0,NULL,NULL,&sti,&pro_info);
复制代码
调用成功后,PROCESS_INFORMATION结构体的hProcess就保存了被创建的进程的句柄了。要结 束进程,调用TerminateProcess函数,第一个参数就是刚才创建的时程的句柄,第二个参数是退出码, 通过GetExitCodeProcess函数可以获取。
  1. DWORD exitCode; //退出码     
  2. //.........     
  3. GetExitCodeProcess(pro_info.hProcess,&exitCode); //获取退出码     
  4. TerminateProcess(pro_info.hProcess, exitCode);     
  5. // 关闭句柄     
  6. CloseHandle(pro_info.hThread);     
  7. CloseHandle(pro_info.hProcess);
复制代码

结帖率:90% (18/20)
发表于 2013-9-25 21:17:42 | 显示全部楼层   广东省茂名市
回复 支持 反对

使用道具 举报

结帖率:100% (11/11)
 楼主| 发表于 2013-8-3 10:25:10 | 显示全部楼层   河北省衡水市
fml224 发表于 2013-8-3 10:20
这样排列好看多了啊

我也是这么觉着的!

评分

参与人数 1精币 +2 收起 理由
宇智波·泉奈 + 2 被逼的

查看全部评分

回复 支持 反对

使用道具 举报

结帖率:57% (13/23)
发表于 2013-8-3 10:20:54 | 显示全部楼层   广东省惠州市
这样排列好看多了啊
回复 支持 反对

使用道具 举报

结帖率:100% (11/11)
 楼主| 发表于 2013-8-3 09:57:46 | 显示全部楼层   河北省衡水市

其实我是“高手”  只是你们不知道而已
回复 支持 反对

使用道具 举报

结帖率:100% (11/11)
 楼主| 发表于 2013-8-3 09:57:18 | 显示全部楼层   河北省衡水市
米和饭 发表于 2013-8-3 09:56
呵呵,看你妹啊看

看瞎你的24K钛合金加强版狗眼!

点评

JJ Fly   广东省梅州市  发表于 2013-8-3 09:59
回复 支持 反对

使用道具 举报

结帖率:100% (12/12)
发表于 2013-8-3 09:56:58 | 显示全部楼层   福建省厦门市
兔子你知道的真多.....  
回复 支持 反对

使用道具 举报

结帖率:90% (9/10)
发表于 2013-8-3 09:56:37 | 显示全部楼层   广东省梅州市
呵呵,看你妹啊看
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表