Delphi枚舉系統進程,並檢測內存使用情況,以進度條百分比的形式顯示內存使用率,同時檢測實際內存總字節數、可用的實際內存字節數、分頁文件總字節數,虛擬內存的總字節數,可用的虛擬內存字節數等, 以下部分是對所要獲取數據項的變量定義:
dwLength: DWORD; //1.數據結構長度 dwMemoryLoad: DWORD; //2.內存使用百分比 dwTotalPhys: DWORD; //3.物理內存總字節數 dwAvailPhys: DWORD; //4.剩余的物理內存字節數 dwTotalPageFile: DWORD; //5.頁面文件總字節數 dwAvailPageFile: DWORD; //6.剩余的頁文件字節數 dwTotalVirtual: DWORD; //7.虛擬內存的總字節數 dwAvailVirtual: DWord; //8.剩余的虛擬內存字節數
以下是程序的完整代碼:
001
unit
Unit1;
002
interface
003
uses
004
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
005
Dialogs, StdCtrls, ExtCtrls,mmsystem, Gauges,TLHelp32;
006
type
007
TForm1 =
class
(TForm)
008
Button1: TButton;
009
Memo1: TMemo;
010
Timer1: TTimer;
011
Gauge1: TGauge;
012
Gauge2: TGauge;
013
Gauge3: TGauge;
014
Label1: TLabel;
015
Label2: TLabel;
016
Label3: TLabel;
017
Label4: TLabel;
018
Button2: TButton;
019
ListBox1: TListBox;
020
procedure
Button1Click(Sender: TObject);
021
procedure
Timer1Timer(Sender: TObject);
022
procedure
FormDestroy(Sender: TObject);
023
procedure
Button2Click(Sender: TObject);
024
private
025
{ Private declarations }
026
public
027
{ Public declarations }
028
end
;
029
var
030
Form1: TForm1;
031
implementation
032
{$R *.dfm}
033
procedure
TForm1
.
Button1Click(Sender: TObject);
034
begin
035
Timer1
.
Enabled:=
True
;
036
end
;
037
procedure
TForm1
.
Timer1Timer(Sender: TObject);
038
var
039
str:
String
;
040
ml:TMemoryStatus;
041
begin
042
{const //完整的TMemoryStatus結構
043
GMEM_DISCARDED = $4000;
044
GMEM_LOCKCOUNT = 255;
045
type
046
PMemoryStatus = ^TMemoryStatus;
047
_MEMORYSTATUS = record
048
dwLength: DWord; //1.數據結構長度
049
dwMemoryLoad: DWord; //2.內存使用百分比
050
dwTotalPhys: DWord; //3.物理內存總字節數
051
dwAvailPhys: DWord; //4.剩余的物理內存字節數
052
dwTotalPageFile: DWord; //5.頁面文件總字節數
053
dwAvailPageFile: DWord; //6.剩余的頁文件字節數
054
dwTotalVirtual: DWord; //7.虛擬內存的總字節數
055
dwAvailVirtual: DWord; //8.剩余的虛擬內存字節數
056
end;
057
TMemoryStatus = _MEMORYSTATUS;
058
MEMORYSTATUS = _MEMORYSTATUS;
059
}
060
GlobalMemoryStatus(ml);
061
str:=
'數據結構長度:'
+IntToStr(ml
.
dwLength)+#
13
#
10
062
+
'內存使用百分比:'
+IntToStr(ml
.
dwMemoryLoad)+
'%'
+#
13
#
10
063
+
'實際內存總字節數 :'
+FormatFloat(
'###,###'
,ml
.
dwTotalPhys)+#
13
#
10
064
+
'可用的實際內存字節數:'
+FormatFloat(
'###,###'
,ml
.
dwAvailPhys)+#
13
#
10
065
+
'分頁文件總字節數 :'
+FormatFloat(
'###,###'
,ml
.
dwTotalPageFile)+#
13
#
10
066
+
'分頁文件可用字節數 :'
+FormatFloat(
'###,###'
,ml
.
dwAvailPageFile)+#
13
#
10
067
+
'虛擬內存的總字節數 :'
+FormatFloat(
'###,###'
,ml
.
dwTotalVirtual)+#
13
#
10
068
+
'可用的虛擬內存字節數:'
+FormatFloat(
'###,###'
,ml
.
dwAvailVirtual)+#
13
#
10
;
069
Memo1
.
Lines
.
Clear;
070
Memo1
.
Lines
.
Add(str);
071
//進度條顯示方式
072
Gauge1
.
Progress:=Round((
1
-ml
.
dwAvailPhys/ml
.
dwTotalPhys)*
100
);
//
073
Gauge2
.
Progress:=Round((
1
-ml
.
dwAvailPageFile/ml
.
dwTotalPageFile)*
100
);
074
Gauge3
.
Progress:=Round((
1
-ml
.
dwAvailVirtual/ml
.
dwTotalVirtual)*
100
);
075
end
;
076
077
procedure
TForm1
.
FormDestroy(Sender: TObject);
078
begin
079
Timer1
.
Enabled:=
False
;
//程序退出時關閉Timer1
080
end
;
081
082
procedure
TForm1
.
Button2Click(Sender: TObject);
083
var
lppe: TProcessEntry32;
084
{ tagPROCESSENTRY32 = packed record
085
dwSize: DWord; //指定該結構的大小
086
cntUsage: DWord; //進程的參照數
087
th32ProcessID: DWord; //當前進程標志符
088
th32DefaultHeapID: DWord; //當前進程的默認堆棧標志符
089
th32ModuleID: DWord; //當前進程的模塊標志符
090
cntThreads: DWord; //進程激活的執行線程數
091
th32ParentProcessID: DWord; //創建進程的父進程標志符
092
pcPriClassBase: Longint; //基礎優先類
093
dwFlags: DWord; //保留類,未使用
094
szExeFile: array[0..MAX_PATH - 1] of Char;// 進程相關的文件名
095
end;
096
}
097
found :
boolean
;
098
Hand : THandle;
099
begin
100
ListBox1
.
Clear;
101
ListBox1
.
Items
.
Add(
'進程名________進程ID'
);
102
Hand := CreateToolhelp32Snapshot(TH32CS_SNAPALL,
0
);
//創建一個進程快照
103
found := Process32First(Hand,lppe);
//獲取第一個進程
104
while
found
do
105
begin
106
ListBox1
.
Items
.
Add(lppe
.
szExeFile+
'__________'
+IntToStr(lppe
.
th32ProcessID));
//列出所有進程。
107
found := Process32Next(Hand,lppe);
//不斷的獲取下一個進程
108
end
;
109
Caption:=
'進程總數:'
+IntToStr(listBox1
.
Items
.
Count-
1
);
//得到進程總數
110
end
;
111
end
.
程序運行最終效果運行截圖: