CreateToolhelp32Snapshot可以通过获取进程信息为指定的进程、进程使用的堆[HEAP]、模块[MODULE]、
线程建立一个快照。
CreateToolhelp32Snap
函数通过获取进程信息为指定的进程、进程使用的堆[HEAP]、模块[MODULE]、线程建立一个快照.
说到底,可以获取系统中正在运行的进程信息,线程信息,等
函数原型
HANDLE WINAPI CreateToolhelp32Snapshot(
DWORD dwFlags, //用来指定“快照”中需要返回的对象,可以是TH32CS_SNAPPROCESS等
DWORD th32ProcessID //一个进程ID号,用来指定要获取哪一个进程的快照,当获取系统进程列表或获取 当前进程快照时可以设为0
);
dwFlags
指定快照中包含的系统内容,这个参数能够使用下列数值(
常量)中的一个或多个。
TH32CS_INHERIT(0x80000000) - 声明快照句柄是可继承的。
TH32CS_SNAPALL - 在快照中包含系统中所有的进程和
线程。
TH32CS_SNAPHEAPLIST(0x00000001) - 在快照中包含在th32ProcessID中指定的进程的所有的堆。
TH32CS_SNAPMODULE(0x00000008) - 在快照中包含在th32ProcessID中指定的进程的所有的模块。
TH32CS_SNAPPROCESS(0x00000002) - 在快照中包含系统中所有的进程。
TH32CS_SNAPTHREAD(0x00000004) - 在快照中包含系统中所有的
线程。
H32CS_SNAPALL = (TH32CS_SNAPHEAPLIST | TH32CS_SNAPPROCESS | TH32CS_SNAPTHREAD | TH32CS_SNAPMODULE)
th32ProcessID
指定将要快照的进程ID。如果该参数为0表示快照当前进程。该参数只有在设置了TH32CS_SNAPHEAPLIST或者TH32CS_SNAPMODULE后才有效,在其他情况下该参数被忽略,所有的进程都会被快照。
返回值
解释
调用成功,返回快照的句柄,调用失败,返回INVALID_HANDLE_VALUE 。
备注
使用
GetLastError函数查找该函数产生的错误状态码。
注意,在Win NT中,要删除快照,使用
CloseHandle函数;在Win CE中,要删除快照,使用CloseToolhelp32Snapshot函数。
delphi使用实例
uses TLHelp32;
procedure TForm1.Button1Click(Sender: TObject);
var
ProcessName: string;
ProcessID: integer;
ListLoop: Boolean;
FsnapShotHandle: Thandle;
FProcessEntry32: TProcessEntry32;
begin
Fsnapshothandle := CreateToolHelp32SnapShot(TH32CS_SNAPPROCESS, 0);
FProcessEntry32.dwsize := SizeOF(FProcessEntry32);
Listloop := Process32First(FSnapshotHandle, FProcessEntry32);
while Listloop do begin
ProcessName := FprocessEntry32.szExeFile;
ProcessID := FProcessEntry32.th32ProcessID;
listbox1.Items.Add('Process NAME:' + ProcessNAme);
ListLoop := Process32Next(FSnapshotHandle, FprocessEntry32);
end;
end;
VB使用实例
dwSize As Long
cntUseage As Long
th32ProcessID As Long
th32DefaultHeapID As Long
th32ModuleID As Long
cntThreads As Long
th32ParentProcessID As Long
pcPriClassBase As Long
swFlags As Long
szExeFile As String * 1024
End Type
Private sub demo()
Dim MySnapHandle As Long
Dim ProcessInfo As
PROCESSENTRY32MySnapHandle = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0)
ProcessInfo.dwSize = Len(ProcessInfo)
If Process32First(MySnapHandle, ProcessInfo)<>0 Then
Do
'
遍历进程,查找notepad.exe,找到后执行操作.......
End If
Loop While Process32Next(MySnapHandle, ProcessInfo)<>0
End If
CloseHandle MySnapHandle
end sub
VC++使用实例
int main(int argc, char* argv[])
{
//在使用这个结构前,先设置它的大小
pe32.dwSize = sizeof(pe32);
//给系统内所有的进程拍个快照
HANDLE hProcessSnap = ::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
if (hProcessSnap == INVALID_HANDLE_VALUE)
{
return -1;
}
BOOL bMore = ::
Process32First(hProcessSnap,&pe32);
while (bMore)
{
bMore = ::
Process32Next(hProcessSnap,&pe32);
}
::
CloseHandle(hProcessSnap);
return 0;
}
易语言使用实例
.子程序 进程_PID取进程路径, 文本型, 公开, 取指定进程的程序启动路径(成功返回路径,失败或进程不存在返回空)
.参数 进程ID, 整数型
.局部变量 快照句柄, 整数型
.局部变量 路径, 文本型
.局部变量 模块信息, LPMODULEENTRY32, , , lpmoduleentry32
快照句柄 = CreateToolhelp32Snapshot (8, 进程ID)
.如果真 (快照句柄 = -1)
返回 (“”)
.如果真结束
模块信息.size = 1024
Module32First (快照句柄, 模块信息)
路径 = 到文本 (模块信息.szpath)
CloseHandle (快照句柄)
返回 (路径)
go实例