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元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
