创建博客 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

隐龙 为了一生的信念

今日默默沉于水,他日飞腾在九天...

 
 
 

日志

 
 
关于我

今日默默沉于水,他日飞腾在九天.神秘的地方,今天,从这里开始...

LOFTER精选

CreateToolhelp32Snapshot  

2010-01-29 23:02:05|  分类: Windows API |  标签: |举报 |字号 订阅

CreateToolhelp32Snapshot函数为指定的进程、进程使用的堆[HEAP]、模块[MODULE]、线程[THREAD])建立一个快照[snapshot]。
  HANDLE WINAPI CreateToolhelp32Snapshot(
  DWORD dwFlags,
  DWORD th32ProcessID
  );
  参数:
  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 Or TH32CS_SNAPPROCESS Or TH32CS_SNAPTHREAD Or TH32CS_SNAPMODULE)
  Const TH32CS_INHERIT = &H80000000
  th32ProcessID
  [输入]指定将要快照的进程ID。如果该参数为0表示快照当前进程。该参数只有在设置了TH32CS_SNAPHEAPLIST,TH32CS_SNAPMODULE,TH32CS_SNAPALL后才有效,在其他情况下该参数被忽略,所有的进程都会被快照。
  返回值:
  调用成功,返回快照的句柄,调用失败,返回INVAID_HANDLE_VALUE。
  备注:
  使用GetLastError函数查找该函数产生的错误状态码。
  要删除快照,使用CloseHandle函数
  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 调用失败.\n");
  return -1;
  }
  //遍历进程快照,轮流显示每个进程的信息
  BOOL bMore = ::Process32First(hProcessSnap,&pe32);
  while (bMore)
  {
  printf("进程名称:%s\n",pe32.szExeFile);
  printf("进程ID:%u\n\n",pe32.th32ProcessID);
  bMore = ::Process32Next(hProcessSnap,&pe32);
  }
  //不要忘记清除掉snapshot对象
  ::CloseHandle(hProcessSnap);
  return 0;
  }
  评论这张
 
阅读(1531)| 评论(0)
推荐 转载

历史上的今天

最近读者

热度

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2014