您的位置:首页 > 编程语言

使用易语言完成进程枚举代码分析

2013-03-05 22:48 381 查看
相信很多人在易语言编程中包括其他编程中在进行进程方面的操作,特别是进程枚举的时候都会用到别人的代码、公开的dll、类、模块等。

很少有人能自己写出进程枚举操作。特别是对于使用易语言的同学来说更是如此了。你们使用了易语言带来的便利性,却忽视了自己知识的重要性。

下面我就对非常短的进程枚举代码进行一下分析。(仅能枚举普通进程,不能进入内核枚举隐藏进程)

首先讲一下要用到的API吧:

整数型 CreateToolhelp32Snapshot(整数型 dwFlags,整数型 th32ProcessID)//整数型也就是int类型,这个API的作用是创建一个当前进程列表的快照。非常重要哦!

整数型 GetLastError() 这个API其实可有可无。它的作用是返回上一次API发生错误的错误代码。如果你CreateToolhelp32Snapshot的返回值是INVALID_HANDLE_VALUE(也就是-1)的话,就可以立刻调用这个函数取错误信息咯,注意是立刻哈。

逻辑型 Process32First(整数型 hSnapshot,LPPROCESSENTRY32 lppe)这个就是装载第一个进程的API啦。通过结构体(自定义数据类型)PPROCESSENTRY32(下文会介绍)来保存第一个进程的信息

逻辑型 Process32Next(整数型 hSnapshot,LPPROCESSENTRY32 lppe)和上面一样。这个只不过就是每调用一次,就装载下一个进程的信息啦。

整数型 CloseHandle(整数型 对象句柄)通过函数:CreateToolhelp32Snapshot返回的procSnap就要把它结束掉啦。

API就只用到了这几个,是不是很简单呢?下面让我们来看一下上面提到的PPROCESSENTRY32吧!

.版本 2

.数据类型 LPPROCESSENTRY32

.成员 数据类型长度, 整数型

.成员 进程引用计数, 整数型

.成员 进程ID, 整数型

.成员 进程默认堆ID, 整数型

.成员 进程模块ID, 整数型

.成员 线程计数, 整数型

.成员 父进程ID, 整数型

.成员 线程优先权, 整数型

.成员 保留, 整数型

.成员 进程文件名, 字节型, , "100"

这里我把它换成中文的说明啦,这样我就不用解释了吧。大家是不是一看就懂了呢?
这个进程文件名就是你要保存的字符型数组,100就代表了你能装载100的长度的进程名。是不是够了呢?o(∩_∩)o 如果不够就自己加吧。。

好了,这样是不是对这个进程枚举有了一个全新的理解了呢?
最后再让我们来看看完整的源代码吧!

.版本 2

.局部变量 procSnap, 整数型
.局部变量 bRet, 逻辑型
.局部变量 procEntry, LPPROCESSENTRY32

procSnap = CreateToolhelp32Snapshot (#TH32CS_SNAPPROCESS, 0) ' 创建进程快照
.如果真 (procSnap = #INVALID_HANDLE_VALUE) ' 判断是否快照成功
信息框 (“发生致命错误,错误号:” + 到文本 (GetLastError ()), #错误图标, “警告!”) ' 如果不成功就获取错误信息
返回 () ' 程序不再向下执行
.如果真结束
procEntry.数据类型长度 = 296 ' 由于易里没有sizeof,所以就直接给大小,C++里可以直接sizeof(PPROCESSENTRY32)这个数据类型哦
bRet = Process32First (procSnap, procEntry) ' 查找第一个进程
.判断循环首 (bRet) ' 是否有进程
输出调试文本 (到文本 (procEntry.进程文件名)) ' 输出进程文件名
输出调试文本 (procEntry.进程ID) ' 输出进程ID
bRet = Process32Next (procSnap, procEntry) ' 查找下一个进程
.判断循环尾 () ' 回到循环开始点继续判断
CloseHandle (procSnap) ' 关闭对象

好了,会了吧!如果有问题欢迎回复本文章!
by:Will

本文出自 “编程交流” 博客,请务必保留此出处http://sqwill.blog.51cto.com/4992462/1147970
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐