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函數功能:函數為指定的進程、進程使用的堆[HEAP]、}
{模塊[MODULE]、線程[THREAD])建立一個快照[snapshot]。 }
{參數1說明:dwFlags}
{TH32CS_INHERIT 聲明快照句柄是可繼承的。}
{TH32CS_SNAPALL 在快照中包含系統中所有的進程和線程。}
{TH32CS_SNAPHEAPLIST 在快照中包含在th32ProcessID中指定的進程的所有的堆。}
{TH32CS_SNAPMODULE 在快照中包含在th32ProcessID中指定的進程的所有的模塊。}
{TH32CS_SNAPPROCESS 在快照中包含系統中所有的進程。}
{TH32CS_SNAPTHREAD 在快照中包含系統中所有的線程。}
{參數2說明:th32ProcessID}
{指定將要快照的進程ID。如果該參數為0表示快照當前進程。該參數只有在設置了}
{TH32CS_SNAPHEAPLIST或者TH32CS_SNAPMODULE后才有效,在其他情況下該參數被忽略,}
{所有的進程都會被快照。}
{返回值:}
{調用成功,返回快照的句柄,調用失敗,返回INVALID_HANDLE_VALUE 。 }
hSnapshot:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
if hSnapshot=0 then begin
ShowMessage('創建進程快照失敗!');
Abort();
end;
{PROCESSENTRY32結構}
{tagPROCESSENTRY32 = packed record
dwSize: DWORD; 結構的大小
cntUsage: DWORD; 此進程的引用計數
th32ProcessID: DWORD; 進程ID
th32DefaultHeapID: DWORD; 進程默認堆
th32ModuleID: DWORD; 進程模塊IDThis
cntThreads: DWORD; 此進程開啟的線程計數
th32ParentProcessID: DWORD; 父進程的ID
pcPriClassBase: Longint; 線程優先權
dwFlags: DWORD;
szExeFile: array[0..MAX_PATH - 1] of Char; 進程全名
end;}
pe32.dwSize:=SizeOf(PROCESSENTRY32);
{function Process32First(hSnapshot: THandle; var lppe: TProcessEntry32): BOOL;}
{Process32First 是一個進程獲取函數,當我們利用函數CreateToolhelp32Snapshot()}
{獲得當前運行進程的快照后,我們可以利用process32First函數來獲得第一個進程的句柄 }
{參數1說明:hSnapshot}
{CreateToolhelp32Snapshot獲取進程快照的句柄}
{參數2說明:lppe}
{TProcessEntry32創建的結構體}
{返回值:}
{調用成功,返回True,調用失敗,返回False。 }
if not Process32First(hSnapshot,pe32) then begin
ShowMessage('獲取第一個進程失敗!');
end;
{function Process32Next(hSnapshot: THandle; var lppe: TProcessEntry32): BOOL;}
{Process32Next是一個進程獲取函數,當我們利用函數CreateToolhelp32Snapshot()}
{獲得當前運行進程的快照后,我們可以利用Process32Next函數來獲得下一個進程的句柄}
{參數1說明:hSnapshot}
{CreateToolhelp32Snapshot獲取進程快照的句柄}
{參數2說明:lppe}
{TProcessEntry32創建的結構體}
{返回值:}
{調用成功,返回True,調用失敗,返回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('程序名稱:獲取進程快照'+#13+
'版本:1.0.0.0'+#13+
'日期:2010-10-4'+#13+
'作者:江湖一鍵客'+#13+
'業務聯系QQ:82530662');
end;
end.
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元

