unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, TLHelp32, ComCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
ListView1: TListView;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
hSnapshot:THandle;
pe32:TProcessEntry32;
item:TListItem;
begin
{function CreateToolhelp32Snapshot(dwFlags, th32ProcessID: DWORD): THandle;}
{CreateToolhelp32Snapshot函數(shù)功能:函數(shù)為指定的進(jìn)程、進(jìn)程使用的堆[HEAP]、}
{模塊[MODULE]、線程[THREAD])建立一個快照[snapshot]。 }
{參數(shù)1說明:dwFlags}
{TH32CS_INHERIT 聲明快照句柄是可繼承的。}
{TH32CS_SNAPALL 在快照中包含系統(tǒng)中所有的進(jìn)程和線程。}
{TH32CS_SNAPHEAPLIST 在快照中包含在th32ProcessID中指定的進(jìn)程的所有的堆。}
{TH32CS_SNAPMODULE 在快照中包含在th32ProcessID中指定的進(jìn)程的所有的模塊。}
{TH32CS_SNAPPROCESS 在快照中包含系統(tǒng)中所有的進(jìn)程。}
{TH32CS_SNAPTHREAD 在快照中包含系統(tǒng)中所有的線程。}
{參數(shù)2說明:th32ProcessID}
{指定將要快照的進(jìn)程ID。如果該參數(shù)為0表示快照當(dāng)前進(jìn)程。該參數(shù)只有在設(shè)置了}
{TH32CS_SNAPHEAPLIST或者TH32CS_SNAPMODULE后才有效,在其他情況下該參數(shù)被忽略,}
{所有的進(jìn)程都會被快照。}
{返回值:}
{調(diào)用成功,返回快照的句柄,調(diào)用失敗,返回INVALID_HANDLE_VALUE 。 }
hSnapshot:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
if hSnapshot=0 then begin
ShowMessage('創(chuàng)建進(jìn)程快照失敗!');
Abort();
end;
{PROCESSENTRY32結(jié)構(gòu)}
{tagPROCESSENTRY32 = packed record
dwSize: DWORD; 結(jié)構(gòu)的大小
cntUsage: DWORD; 此進(jìn)程的引用計數(shù)
th32ProcessID: DWORD; 進(jìn)程ID
th32DefaultHeapID: DWORD; 進(jìn)程默認(rèn)堆
th32ModuleID: DWORD; 進(jìn)程模塊IDThis
cntThreads: DWORD; 此進(jìn)程開啟的線程計數(shù)
th32ParentProcessID: DWORD; 父進(jìn)程的ID
pcPriClassBase: Longint; 線程優(yōu)先權(quán)
dwFlags: DWORD;
szExeFile: array[0..MAX_PATH - 1] of Char; 進(jìn)程全名
end;}
pe32.dwSize:=SizeOf(PROCESSENTRY32);
{function Process32First(hSnapshot: THandle; var lppe: TProcessEntry32): BOOL;}
{Process32First 是一個進(jìn)程獲取函數(shù),當(dāng)我們利用函數(shù)CreateToolhelp32Snapshot()}
{獲得當(dāng)前運行進(jìn)程的快照后,我們可以利用process32First函數(shù)來獲得第一個進(jìn)程的句柄 }
{參數(shù)1說明:hSnapshot}
{CreateToolhelp32Snapshot獲取進(jìn)程快照的句柄}
{參數(shù)2說明:lppe}
{TProcessEntry32創(chuàng)建的結(jié)構(gòu)體}
{返回值:}
{調(diào)用成功,返回True,調(diào)用失敗,返回False。 }
if not Process32First(hSnapshot,pe32) then begin
ShowMessage('獲取第一個進(jìn)程失敗!');
end;
{function Process32Next(hSnapshot: THandle; var lppe: TProcessEntry32): BOOL;}
{Process32Next是一個進(jìn)程獲取函數(shù),當(dāng)我們利用函數(shù)CreateToolhelp32Snapshot()}
{獲得當(dāng)前運行進(jìn)程的快照后,我們可以利用Process32Next函數(shù)來獲得下一個進(jìn)程的句柄}
{參數(shù)1說明:hSnapshot}
{CreateToolhelp32Snapshot獲取進(jìn)程快照的句柄}
{參數(shù)2說明:lppe}
{TProcessEntry32創(chuàng)建的結(jié)構(gòu)體}
{返回值:}
{調(diào)用成功,返回True,調(diào)用失敗,返回False。 }
ListView1.Clear;
repeat
item:=ListView1.Items.Add;
item.Caption:=IntToStr(pe32.th32ProcessID);
item.SubItems.Add(pe32.szExeFile);
item.SubItems.Add(IntToStr(pe32.pcPriClassBase));
item.SubItems.Add(IntToStr(pe32.th32ParentProcessID));
until not Process32Next(hSnapshot,pe32);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
ShowMessage('程序名稱:獲取進(jìn)程快照'+#13+
'版本:1.0.0.0'+#13+
'日期:2010-10-4'+#13+
'作者:江湖一鍵客'+#13+
'業(yè)務(wù)聯(lián)系QQ:82530662');
end;
end.
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元

