CreateToolhelp32Snapshot

CreateToolhelp32Snapshot可以通過獲取進程信息為指定的進程、進程使用的堆[HEAP]、模組[MODULE]、執行緒建立一個快照。

基本介紹

  • 中文名:CreateToolhelp32Snapshot
  • 屬性:函式
  • 功能:建立一個快照
  • 參數:dwFlags
  • 頭檔案:tlhelp32.h
CreateToolhelp32Snapshot,函式原型:,dwFlags,th32ProcessID,返回值:,解釋,備註:,delphi使用實例:,VB使用實例:,VC++使用實例:,

CreateToolhelp32Snapshot

函式通過獲取進程信息為指定的進程、進程使用的堆[HEAP]、模組[MODULE]、執行緒建立一個快照.
說到底,可以獲取系統中正在運行的進程信息,執行緒信息,等

函式原型:

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

VC++使用實例:

#include "StdAfx.h"
#include "windows.h"
#include "tlhelp32.h"
#include "stdio.h"
int main(int argc, char* argv[])
{
//在使用這個結構前,先設定它的大小
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("進程名稱:%ls\n",pe32.szExeFile); //這裡得到的應該是寬字元,用%ls,不然無法正常列印
printf("進程ID:%u\n\n",pe32.th32ProcessID);
bMore = ::Process32Next(hProcessSnap,&pe32);
}
//不要忘記清除掉snapshot對象
::CloseHandle(hProcessSnap);
return 0;
}

相關詞條

熱門詞條

聯絡我們