使用易语言完成进程枚举代码分析
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
很少有人能自己写出进程枚举操作。特别是对于使用易语言的同学来说更是如此了。你们使用了易语言带来的便利性,却忽视了自己知识的重要性。
下面我就对非常短的进程枚举代码进行一下分析。(仅能枚举普通进程,不能进入内核枚举隐藏进程)
首先讲一下要用到的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
相关文章推荐
- 基于visual c++之windows核心编程代码分析(19)枚举进程以及进程加载模块信息
- 自娱自乐7之Linux UDC驱动2(自编udc驱动,现完成枚举过程,从驱动代码分析枚举过程)
- [置顶] 自娱自乐7之Linux UDC驱动2(自编udc驱动,现完成枚举过程,从驱动代码分析枚举过程)
- 基于visual c++之windows核心编程代码分析(52)使用WMI 获取进程启动参数
- 基于visual c++之windows核心编程代码分析(52)使用WMI 获取进程启动参数
- 基于visual c++之windows核心编程代码分析(16)使用邮槽进行进程通信
- 代码静态分析工具——splint的学习与使用
- IOS autoLayout之使用VFL语言进行代码自动布局
- 使用ltrace、strace跟踪Linux进程事件,辅助分析疑难杂症
- 汇编语言字符串加密代码分析(2)
- 使用ncc分析代码
- 以学习的身份使用一种语言完成工作是否值得?目标:从文件中分割多个章节
- JVM执行篇:使用HSDIS插件分析JVM代码执行细节--转
- 【MyBatis源码分析】TypeHandler解析属性配置元素详述及相关枚举使用高级进阶
- Perl遍历目录和使用Linux命令分析日志的代码实例分享
- 在.NET平台上使用Scala语言(下):分析
- 代码包结构分析工具JDepend的使用方法
- magento -- 1.4版本使用google analytic 流量分析代码的bug
- 使用meminfo分析Android单个进程内存信息
- 从零开始学C++之STL(七):剩下5种算法代码分析与使用示例(remove 、rotate 、sort、lower_bound、accumulate)