文章目录[隐藏]
API进程_取ID数组 是易语言大漠实现多线程时用到的一个重要功能,主要用到几个API命令,CreateToolhelp32Snapshot,process32First,Process32Next,CloseHandle 四个,要学习了自定义数据类型的方法。
优酷全部教程播单:http://i.youku.com/i/UNTU3NDYyODg0/playlists
高清下载:百度云链接:http://pan.baidu.com/s/1nvt18Tz
本人QQ: 272586593
源码、下载密码、和高清视频进QQ群: 521068947 到群文件下载。
Win下查看进程
1、最简单的查看进程的办法是使用Windows任务管理器,可以在任务栏上单击右键打开,也可以通过Ctrl+Alt+delete的快捷键唤出。
2、窗口中输入tasklist并回车就可以看到进程列表。
------------------------------------------------------------------------------------
进程_取ID数组
用到以下API函数,分别介绍如下:
1、CreateToolhelp32Snapshot获得当前运行进程的快照
CreateToolhelp32Snapshot可以通过获取进程信息为指定的进程、进程使用的堆[HEAP]、模块[MODULE]、线程建立一个快照。
返回值:
解释
调用成功,返回快照的句柄,调用失败,返回(INVALID_HANDLE_VALUE)表示无效的句柄值 。
备注:
使用GetLastError函数查找该函数产生的错误状态码。
注意,在Win NT中,要删除快照,使用CloseHandle函数;在Win CE中,要删除快照,使用CloseToolhelp32Snapshot函数。
.DLL命令 API_CreateToolhelp32Snapshot, 整数型, "KERNEL32.DLL", "CreateToolhelp32Snapshot", .参数 dwFlags, 整数型, , .参数 th32ProcessID, 整数型, , ---------------------------------------------------------------------------------------------- .版本 2 .DLL命令 CreateToolhelp32Snapshot, 整数型, , "CreateToolhelp32Snapshot", 公开, 创建进程快照 .参数 falg, 整数型 .参数 id, 整数型
2、process32First
是一个进程获取函数,当我们利用函数CreateToolhelp32Snapshot()获得当前运行进程的快照后,我们可以利用process32First函数来获得第一个进程的句柄。
3、Process32Next
是一个进程获取函数,当我们利用函数CreateToolhelp32Snapshot()获得当前运行进程的快照后,我们可以利用Process32Next函数来获得下一个进程的句柄。
process32First此函数往往和Process32Next
搭配使用,用来枚举当前系统快照相关的所有进程。
函数返回值:成功返回true,否则返回false.
4、API_Process32First
.DLL命令 API_Process32First, 整数型, "KERNEL32.DLL", "Process32First", .参数 hSnapshot, 整数型, , .参数 lppe, LPPROCESSENTRY32, , ----------------------------------------------------------------------------- .版本 2 .DLL命令 Process32First, 整数型, , "Process32First", 公开, 取第一个进程 .参数 h, 整数型 .参数 p,进程信息列表 --------------------------------------------------------------------------------
5、API_Process32Next
.DLL命令 API_Process32Next, 整数型, "KERNEL32.DLL", "Process32Next", .参数 hSnapshot, 整数型, , .参数 lppe, LPPROCESSENTRY32, , .版本 2 .DLL命令 Process32Next, 整数型, , "Process32Next", 公开, 取下一个进程 .参数 h, 整数型 .参数 p,进程信息列表 --------------------------------------------------------------------------------------
注意:两个API函数共同的参数:参数说明
hSnapshot
从CreateToolhelp32Snapshot 返回的句柄。
lppe
指向PROCESSENTRY32结构的指针。
6、LPPROCESSENTRY32
PROCESSENTRY32 结构如下:
(1) dwSize; // 结构大小;整数型 (2)cntUsage; // 此进程的引用计数;整数型 (3) th32ProcessID; // 进程ID; 整数型 (4) th32DefaultHeapID; // 进程默认堆ID;整数型 (5)th32ModuleID; // 进程模块ID;整数型 (6) cntThreads; // 此进程开启的线程计数;整数型 (7) th32ParentProcessID;// 父进程ID;整数型 ( 8) pcPriClassBase; // 线程优先权;整数型 (9) dwFlags; // 保留;整数型 (10) WCHAR szExeFile[MAX_PATH]; // 进程全名;字节型(256)
7、自建数据类型(PROCESSENTRY32)
.版本 2 .数据类型 进程信息列表, 公开 .成员 dwSize, 整数型, , , 1 .成员 cntUsage, 整数型, , , 2 .成员 进程ID, 整数型, , , 3 .成员 th32DefaultHeapID, 整数型, , , 4 .成员 th32ModuleID, 整数型, , , 5 .成员 cntThreads, 整数型, , , 6 .成员 th32ParentProcessID, 整数型, , , 7 .成员 pcPriClassBase, 整数型, , , 8 .成员 dwFlags, 整数型, , , 9 .成员 进程名称, 字节型, , "256", 10
8、CloseHandle
关闭一个内核对象。其中包括文件、文件映射、进程、线程、安全和同步对象等。在CreateThread成功之后会返回一个hThread的handle,且内核对象的计数加1,CloseHandle之后,引用计数减1,当变为0时,系统删除内核对象。
若在线程执行完之后,没有调用CloseHandle,在进程执行期间,将会造成内核对象的泄露,相当于句柄泄露,但不同于内存泄露,这势必会对系统的效率带来一定程度上的负面影响。但当进程结束退出后,系统会自动清理这些资源。
.版本 2 .DLL命令 CloseHandle, 逻辑型, "kernel32", "CloseHandle", 公开, 关闭一个内核对象。其中包括文件、文件映射、进程、线程、安全和同步对象等。涉及文件处理时,这个函数通常与vb的close命令相似。应尽可能的使用close,因为它支持vb的差错控制。注意这个函数使用的文件句柄与vb的文件编号是完全不同的 非零表示成功,零表示失败。会设置GetLastError .参数 对象句柄, 整数型, , 欲关闭的一个对象的句柄;