本Delphi代碼可獲取CPU產品信息,GetSystemInfo獲取CPU硬件信息,可得到中央處理器CPU標識:AMD/Intel,內存大小、遮罩位數、CPU個數,然後是中央處理CPU型號信息,具體可看下圖,有的還可檢測到浮點處理CPU型號、CPU運算速度等。如果你在使用Delphi寫一款硬件檢測方面的軟件,可用本代碼作為一個檢測模塊。
001
unit
Unit1;
002
interface
003
uses
004
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
005
Dialogs, StdCtrls,Registry;
//處理注冊表必須要的pas文件
006
type
007
TForm1 =
class
(TForm)
008
Button2: TButton;
009
Button1: TButton;
010
memo1: TMemo;
011
Button3: TButton;
012
Button4: TButton;
013
procedure
Button2Click(Sender: TObject);
014
Button1Click(Sender: TObject);
015
Button3Click(Sender: TObject);
016
Button4Click(Sender: TObject);
017
private
018
{ Private declarations }
019
public
020
{ Public declarations }
021
end
;
022
var
023
Form1: TForm1;
024
Stop:
Boolean
025
026
implementation
027
{$R *.dfm}
028
TForm1
.
029
SysInfo: TSYSTEMINFO;
030
begin
031
Memo1
clear;
//清空原來的內容
032
GetSystemInfo(SysInfo);
//獲得CPU信息
033
case
sysinfo
wProcessorArchitecture
of
034
0
: Memo1
Lines
Add(
'CPU是intel 結構'
+#
13
)
035
Else
'CPU是別的處理器結構'
);
036
037
'頁面大小: '
+IntToStr(sysinfo
dwPageSize)+#
038
'最低內存地址: '
+IntToStr(
Int64
(sysinfo
lpMinimumApplicationAddress))+#
039
'最高內存地址: '
lpMaximumApplicationAddress))+#
040
'遮罩位數: '
dwActiveProcessorMask));
041
'CPU數目: '
dwNumberOfProcessors));
042
Case
dwProcessorType
043
386
:Memo1
'英特爾 X386系列'
044
486
'英特爾 X486系列'
045
586
'英特爾奔騰系列'
046
'別的處理器'
047
048
'系統虛擬內存的分配間隔寬度:'
dwAllocationGranularity));
049
'CPU級別: '
wProcessorLevel));
050
051
052
Var
myreg:TRegistry;
053
054
055
myreg:=Tregistry
Create;
//建立新的TRegistry變量
056
myreg
RootKey:=HKEY_LOCAL_MacHINE;
//指定根鍵值
057
if
OpenKey(
'hardware\description\system\centralprocessor\0'
,
false
then
058
Begin
059
//讀取數據
060
memo1
lines
add(
'中央處理器CPU標識: '
+myreg
ReadString(
'VendorIdentifIEr'
));
061
'中央處理器CPU型號: '
'IdentifIEr'
062
063
closekey;
064
'hardware\description\system\FloatingPointProcessor\0'
065
066
'浮點處理CPU型號: '
067
068
//關閉TRegistry變量
069
Free;
//釋放TRegistry變量
070
071
function
GetCPUSpeed:
Double
072
const
073
DelayTime =
500
// 以500毫秒為記時單位
074
075
TimerHi, TimerLo: DWord;
076
PriorityClass, Priority:
Integer
077
078
PriorityClass := GetPriorityClass(GetCurrentProcess);
079
Priority := GetThreadPriority(GetCurrentThread);
080
SetPriorityClass(GetCurrentProcess, REALTIME_PRIORITY_CLASS);
081
SetThreadPriority(GetCurrentThread, THREAD_PRIORITY_TIME_CRITICAL);
082
Sleep(
10
083
Asm
084
dw 310Fh
// rdtsc
085
mov TimerLo, eax
086
mov TimerHi, edx
087
088
Sleep(DelayTime);
089
090
091
sub eax, TimerLo
092
sbb edx, TimerHi
093
094
095
096
097
SetThreadPriority(GetCurrentThread, Priority);
098
SetPriorityClass(GetCurrentProcess, PriorityClass);
099
Result := TimerLo /(
1000.0
* DelayTime);
100
101
102
103
Button3
Enabled :=
False
104
Button4
True
105
Stop :=
106
while
not
Stop
do
107
108
Caption := Format(
'CPU 速度: %f MHz'
, [GetCPUSpeed]);
//顯示在窗口標題中
109
Application
ProcessMessages;
110
111
112
113
114
115
116
117
Caption :=
'停止獲取CPU 速度'
118
119
本例效果圖: 代碼文件:unit Unit1;inte
和上篇博文經歷類似, 批量修改文件名字. : ) 不多說
下面把測試程序改一下,讓智能指針與集合結合測試:progr
Delphi單元文件引用名稱問題,Delphi新版本的單元文
IGPMatrix 矩陣 是個接口, 要通過 TGPMa
查看原圖(大圖)