请输入您要查询的百科知识:

 

词条 CreateToolhelp32Snapshot
释义

CreateToolhelp32Snapshot函数为指定的进程、进程使用的堆[HEAP]、模块[MODULE]、线程[THREAD])建立一个快照[snapshot]。

HANDLE WINAPI CreateToolhelp32Snapshot(

DWORD dwFlags, //用来指定“快照”中需要返回的对象,可以是TH32CS_SNAPPROCESS等

DWORD th32ProcessID //一个进程ID号,用来指定要获取哪一个进程的快照,当获取系统进程列表或获取当前进程快照时可以设为0

);

参数:

dwFlags

[输入]指定快照中包含的系统内容,这个参数能够使用下列数值(常量)中的一个或多个。

TH32CS_INHERIT - 声明快照句柄是可继承的。

TH32CS_SNAPALL - 在快照中包含系统中所有的进程和线程。

TH32CS_SNAPHEAPLIST - 在快照中包含在th32ProcessID中指定的进程的所有的堆。

TH32CS_SNAPMODULE - 在快照中包含在th32ProcessID中指定的进程的所有的模块。

TH32CS_SNAPPROCESS - 在快照中包含系统中所有的进程。

TH32CS_SNAPTHREAD - 在快照中包含系统中所有的线程。

Const TH32CS_SNAPHEAPLIST = &H1

Const TH32CS_SNAPPROCESS = &H2

Const TH32CS_SNAPTHREAD = &H4

Const TH32CS_SNAPMODULE = &H8

Const TH32CS_SNAPALL = (TH32CS_SNAPHEAPLIST | TH32CS_SNAPPROCESS | TH32CS_SNAPTHREAD | TH32CS_SNAPMODULE)

Const TH32CS_INHERIT = &H80000000

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使用实例:

Private Type PROCESSENTRY32

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 PROCESSENTRY32

MySnapHandle = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0)

ProcessInfo.dwSize = Len(ProcessInfo)

If Process32First(MySnapHandle, ProcessInfo) <> 0 Then

Do

If Left(LCase(ProcessInfo.szExeFile), InStr(ProcessInfo.szExeFile, ".") + 3) = "notepad.exe" Then

'遍历进程,查找notepad.exe,找到后执行操作.......

End If

Loop While Process32Next(MySnapHandle, ProcessInfo) <> 0

End If

CloseHandle MySnapHandle

end sub

C++例子

#include "StdAfx.h"

#include "windows.h"

#include "tlhelp32.h"

#include "stdio.h"

int main(int argc, char* argv[])

{

PROCESSENTRY32 pe32;

//在使用这个结构前,先设置它的大小

pe32.dwSize = sizeof(pe32);

//给系统内所有的进程拍个快照

HANDLE hProcessSnap = ::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);

if (hProcessSnap == INVALID_HANDLE_VALUE)

{

printf("CreateToolhelp32Snapshot 调用失败.\");

return -1;

}

//遍历进程快照,轮流显示每个进程的信息

BOOL bMore = ::Process32First(hProcessSnap,&pe32);

while (bMore)

{

printf("进程名称:%s\",pe32.szExeFile);

printf("进程ID:%u\\",pe32.th32ProcessID);

bMore = ::Process32Next(hProcessSnap,&pe32);

}

//不要忘记清除掉snapshot对象

::CloseHandle(hProcessSnap);

return 0;

}

随便看

 

百科全书收录4421916条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。

 

Copyright © 2004-2023 Cnenc.net All Rights Reserved
更新时间:2025/2/25 22:05:21