C++学习笔记: CreateToolhelp32Snapshot

3 篇文章 0 订阅

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函数


C++例子   
#include <Windows.h>
#include <iostream>
#include <TlHelp32.h>

void PrintProcess();

void main()
{
	PrintProcess();
}

void PrintProcess()
{
	PROCESSENTRY32 pe32;
	//在使用这个结构前,先设置它的大小
	pe32.dwSize = sizeof(pe32);
	//给系统内所有的进程拍个快照
	HANDLE hProcessSnap = ::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
	if (hProcessSnap == INVALID_HANDLE_VALUE)
	{
		printf("CreateToolhelp32Snapshot 调用失败.\n");
		return;
	}
	//遍历进程快照,轮流显示每个进程的信息
	BOOL bMore = ::Process32First(hProcessSnap, &pe32);
	while (bMore)
	{
		printf("进程ID:%5u  进程名称:%s\n", pe32.th32ProcessID, pe32.szExeFile);
		bMore = ::Process32Next(hProcessSnap, &pe32);
	}
	//不要忘记清除掉snapshot对象
	::CloseHandle(hProcessSnap);
	return;
}

最后注:该函数在头文件 tlhelp32.h 中声明,因此需要添加头文件信息。

转自CreateToolhelp32Snapshot http://blog.csdn.net/zyq11223/article/details/7699631
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: createtoolhelp32snapshot是Windows API中的一个函数,用于创建一个系统进程和模块的快照。它的具体用法是通过调用该函数并传递一个指向PROCESSENTRY32结构的指针来创建快照。这个结构体包含有关进程的信息,例如进程ID,父进程ID,进程名称,线程计数等。这个函数可以帮助开发人员获取有关正在运行的进程的信息,从而进行进程管理和监控。 ### 回答2: CreateToolhelp32Snapshot函数是Windows操作系统提供的一个API函数,位于“kernel32.dll”库中。它被用于获取系统中的进程和线程的快照信息。 这个函数的第一个参数dwFlags用于指定快照的类型,可以是TH32CS_SNAPPROCESS或TH32CS_SNAPTHREAD,分别表示获取进程或者线程的快照。 第二个参数th32ProcessID是要获取快照的目标进程的进程ID,如果传入0,则表示获取系统中所有进程的快照。 使用CreateToolhelp32Snapshot函数可以创建一个系统进程和线程的快照,这个快照包含了这些进程和线程的详细信息,如进程ID、父进程ID、线程ID、模块计数等等。 返回的是一个句柄HANDLE,该句柄可以被Process32First和Process32Next等函数使用,以在快照中遍历获取进程或线程的信息。 使用该API可以方便地获取系统当前运行的进程和线程的信息,进而进行一些系统监视、性能分析或者程序调试的工作。 需要注意的是,通过CreateToolhelp32Snapshot获取的快照信息只是一个静态的快照,也就是说获取到的信息在快照创建时的状态,并不会反映后续的实时变化。如果需要获取实时的进程和线程信息,需要结合其他API函数来实现。 ### 回答3: CreateToolhelp32Snapshot 是一个用于获取系统中进程和模块信息的函数。它是 Windows API 中的一个函数,可用于遍历系统中的进程列表以及每个进程中加载的模块列表。 这个函数的调用需要传入一个表示要获取的信息类型的参数,可以是 TH32CS_SNAPPROCESS 或 TH32CS_SNAPMODULE。当传入 TH32CS_SNAPPROCESS 时,函数将返回一个快照句柄,该句柄可以用于获取系统中所有正在运行的进程的详细信息。当传入 TH32CS_SNAPMODULE 时,函数将返回一个快照句柄,该句柄可以用于获取某个指定进程中加载的所有模块的详细信息。 使用 CreateToolhelp32Snapshot 函数时,我们可以通过调用 Process32First 和 Process32Next 函数来遍历进程列表,获取每个进程的信息。同样,我们可以通过调用 Module32First 和 Module32Next 函数来遍历某个指定进程的模块列表,获取每个模块的详细信息。 需要注意的是,在调用 CreateToolhelp32Snapshot 函数返回快照句柄后,我们可以通过调用 CloseHandle 函数来关闭句柄,释放系统资源。同时,在遍历进程或模块列表时,我们需要逐个使用 CloseHandle 函数关闭每个句柄。 使用 CreateToolhelp32Snapshot 函数可以方便地获取系统中正在运行的进程和每个进程加载的模块的信息,这对于了解系统状态、进行进程监控和调试等操作非常有用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值