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 。
備註:
注意,在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
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;
}
while (bMore)
{
printf("進程名稱:%ls\n",pe32.szExeFile); //這裡得到的應該是
寬字元,用%ls,不然無法正常列印
printf("進程ID:%u\n\n",pe32.th32ProcessID);
}
return 0;
}