程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> 用Delphi檢測CPU型號、標識等信息

用Delphi檢測CPU型號、標識等信息

編輯:Delphi

本Delphi代碼可獲取CPU產品信息,GetSystemInfo獲取CPU硬件信息,可得到中央處理器CPU標識:AMD/Intel,內存大小、遮罩位數、CPU個數,然後是中央處理CPU型號信息,具體可看下圖,有的還可檢測到浮點處理CPU型號、CPU運算速度等。如果你在使用Delphi寫一款硬件檢測方面的軟件,可用本代碼作為一個檢測模塊。

用Delphi檢測CPU產品信息

vIEw source print? 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     procedure Button1Click(Sender: TObject); 015     procedure Button3Click(Sender: TObject); 016     procedure 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 procedure TForm1.Button2Click(Sender: TObject); 029 var 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 Memo1.Lines.Add('CPU是別的處理器結構'+#13); 036  end; 037  Memo1.Lines.Add('頁面大小:  '+IntToStr(sysinfo.dwPageSize)+#13); 038  Memo1.Lines.Add('最低內存地址:  '+IntToStr(Int64(sysinfo.lpMinimumApplicationAddress))+#13); 039  Memo1.Lines.Add('最高內存地址:  '+IntToStr(Int64(sysinfo.lpMaximumApplicationAddress))+#13); 040  Memo1.Lines.Add('遮罩位數:  '+IntToStr(sysinfo.dwActiveProcessorMask)); 041  Memo1.Lines.Add('CPU數目:  '+IntToStr(sysinfo.dwNumberOfProcessors)); 042  Case sysinfo.dwProcessorType of 043   386:Memo1.Lines.Add('英特爾 X386系列'); 044   486:Memo1.Lines.Add('英特爾 X486系列'); 045   586:Memo1.Lines.Add('英特爾奔騰系列') 046   Else Memo1.Lines.Add('別的處理器'); 047  end; 048  Memo1.Lines.Add('系統虛擬內存的分配間隔寬度:'+IntToStr(sysinfo.dwAllocationGranularity)); 049  Memo1.Lines.Add('CPU級別:  '+IntToStr(sysinfo.wProcessorLevel)); 050  end; 051 procedure TForm1.Button1Click(Sender: TObject); 052 Var  myreg:TRegistry; 053 begin 054   Memo1.clear;                //清空原來的內容 055   myreg:=Tregistry.Create;    //建立新的TRegistry變量 056   myreg.RootKey:=HKEY_LOCAL_MacHINE; //指定根鍵值 057 if myreg.OpenKey('hardware\description\system\centralprocessor\0',falsethen 058 Begin 059     //讀取數據 060    memo1.lines.add('中央處理器CPU標識: '+myreg.ReadString('VendorIdentifIEr')); 061    memo1.lines.add('中央處理器CPU型號: '+myreg.ReadString('IdentifIEr')); 062 end; 063  myreg.closekey; 064 if myreg.OpenKey('hardware\description\system\FloatingPointProcessor\0',falsethen 065 Begin 066    memo1.lines.add('浮點處理CPU型號:  '+myreg.ReadString('IdentifIEr')); 067 end; 068  myreg.closekey; //關閉TRegistry變量 069  myreg.Free;     //釋放TRegistry變量 070 end; 071 function GetCPUSpeed: Double; 072 const 073   DelayTime = 500// 以500毫秒為記時單位 074 var 075   TimerHi, TimerLo: DWord; 076   PriorityClass, Priority: Integer; 077 begin 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   end; 088   Sleep(DelayTime); 089   Asm 090     dw 310Fh        // rdtsc 091     sub eax, TimerLo 092     sbb edx, TimerHi 093     mov TimerLo, eax 094     mov TimerHi, edx 095   end; 096   097   SetThreadPriority(GetCurrentThread, Priority); 098   SetPriorityClass(GetCurrentProcess, PriorityClass); 099   Result := TimerLo /(1000.0 * DelayTime); 100 end; 101 procedure TForm1.Button3Click(Sender: TObject); 102 begin 103   Button3.Enabled := False; 104   Button4.Enabled := True; 105   Stop := False; 106   while not Stop do 107   begin 108     Caption := Format('CPU 速度: %f MHz', [GetCPUSpeed]);  //顯示在窗口標題中 109     Application.ProcessMessages; 110   end; 111   Button3.Enabled := True; 112   Button4.Enabled := False; 113 end; 114 procedure TForm1.Button4Click(Sender: TObject); 115 begin 116  Stop := True; 117  Caption :='停止獲取CPU 速度'; 118 end; 119 end.
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved