⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.pas

📁 一个很不错的系统信息控件
💻 PAS
字号:
unit Main;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls, MSI_APM, MiTeC_PowrProf, StdCtrls, ExtCtrls;

type
  TwndMain = class(TForm)
    pc: TPageControl;
    TabSheet1: TTabSheet;
    TabSheet2: TTabSheet;
    Image6: TImage;
    eBatLife: TEdit;
    pbBat: TProgressBar;
    eBat: TEdit;
    TabSheet3: TTabSheet;
    Image1: TImage;
    cbCPU: TComboBox;
    Image2: TImage;
    eAPM: TEdit;
    eBatCap: TEdit;
    eBatRemain: TEdit;
    eBatRate: TEdit;
    Label41: TLabel;
    Label39: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    Label9: TLabel;
    eFreq: TEdit;
    eMaxFreq: TEdit;
    eFreqLimit: TEdit;
    eMaxIdle: TEdit;
    eIdle: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label10: TLabel;
    Label11: TLabel;
    Panel1: TPanel;
    Button2: TButton;
    pbCPU: TProgressBar;
    APMPanel: TPanel;
    cbxUPS: TCheckBox;
    cbxTC: TCheckBox;
    cbxVD: TCheckBox;
    cbxPT: TCheckBox;
    cbxDSD: TCheckBox;
    cbxPB: TCheckBox;
    cbxSB: TCheckBox;
    cbxLS: TCheckBox;
    cbxSysBat: TCheckBox;
    Label4: TLabel;
    eLST: TEdit;
    Label5: TLabel;
    eLWT: TEdit;
    Label6: TLabel;
    Label12: TLabel;
    Label13: TLabel;
    eBatChem: TEdit;
    eBatMan: TEdit;
    eBatVolt: TEdit;
    Label14: TLabel;
    eBatID: TEdit;
    Panel2: TPanel;
    eAC: TEdit;
    Image3: TImage;
    cbBat: TComboBox;
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
    procedure cbCPUChange(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure cbBatChange(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
  public
    APM: TMiteC_APM;
    procedure RefreshData;
  end;

var
  wndMain: TwndMain;

implementation

uses MiTeC_Datetime, MiTeC_Routines;

{$R *.dfm}

procedure TwndMain.Button1Click(Sender: TObject);
begin
  refreshData;
end;

procedure TwndMain.Button2Click(Sender: TObject);
begin
  Close;
end;

procedure TwndMain.cbBatChange(Sender: TObject);
var
  s: string;
begin
  eBatCap.Text:='';
  eBatRemain.Text:='';
  eBatRate.Text:='';
  eBatLife.Text:='';
  pbBat.Position:=0;

  if cbBat.ItemIndex=-1 then
    Exit;
  with APM.Battery[cbBat.ItemIndex] do begin
    if APM.BatteryChargeStatus<>[bsNoBattery] then begin
      s:='';
      if PowerState and BATTERY_CHARGING=BATTERY_CHARGING then
        s:=s+'charging, ';
      if PowerState and BATTERY_CRITICAL=BATTERY_CRITICAL then
        s:=s+'critical, ';
      if PowerState and BATTERY_DISCHARGING=BATTERY_DISCHARGING then
        s:=s+'discharging, ';
      if PowerState and BATTERY_POWER_ON_LINE=BATTERY_POWER_ON_LINE then
        s:=s+'power on-line, ';
      SetLength(s,Length(s)-2);
      eBat.Text:=s;
      eBatMan.Text:=Manufacturer;
      eBatChem.Text:=Chemistry;
      eBatID.Text:=UniqueID;
      eBatLife.Text:=FormatSeconds(EstimatedTime);
      eBatCap.Text:=Format('%d Wh',[Capacity div 1000]);
      eBatVolt.Text:=Format('%d V',[Voltage div 1000]);
      eBatRemain.Text:=Format('%d Wh',[CurrentCapacity div 1000]);
      eBatRate.Text:=Format('%d W',[Rate div 1000]);
      pbBat.Max:=Capacity;
      pbBat.Position:=CurrentCapacity;
    end else
      eBat.Text:='No battery present';
  end;
end;

procedure TwndMain.cbCPUChange(Sender: TObject);
begin
  if cbCPU.ItemIndex=-1 then
    Exit;
  with APM.ProcessorPowerStatus[cbCPU.ItemIndex] do begin
    eMaxFreq.Text:=Format('%d MHz',[MaxMHz]);
    eFreq.Text:=Format('%d MHz',[CurrentMHz]);
    eFreqLimit.Text:=Format('%d MHz',[MHzLimit]);
    eMaxIdle.Text:=Format('%d',[MaxIdleState]);
    eIdle.Text:=Format('%d',[CurrentIdleState]);
    if MaxMHz>pbCPU.Max then
      pbCPU.Max:=MaxMHz;
    pbCPU.Position:=CurrentMHz;
  end;
end;

procedure TwndMain.FormCreate(Sender: TObject);
var
  i: Integer;
begin
  APM:=TMiteC_APM.Create(Self);
  APM.RefreshData;
  if APM.BatteryCount=0 then
    pc.ActivePage:=Tabsheet2
  else
    pc.ActivePage:=Tabsheet1;
  Tabsheet1.TabVisible:=APM.BatteryCount>0;
  cbBat.Items.Clear;
  for i:=0 to APM.BatteryCount-1 do
    cbBat.Items.Add(Format('[%d] %s',[i+1,APM.Battery[i].Devicename]));
  cbBat.ItemIndex:=0;

  cbCPU.Items.Clear;
  for i:=1 to APM.ProcessorCount do
    cbCPU.Items.Add(Format('Processor #%d',[i]));
  cbCPU.ItemIndex:=0;

  RefreshData;
end;

procedure TwndMain.RefreshData;
var
  s: string;
begin
  APM.RefreshData;
  case APM.ACPowerStatus of
    psUnknown: s:='unknown power';
    psOnline: s:='AC power';
    psOffline: s:='Battery power';
  end;
  eAC.Text:=Format('System is running on %s',[s]);
  cbBatChange(nil);
  cbCPUChange(nil);

  {if APM.SystemPower.ApmPresent then
    eAPM.Text:='System supports APM'
  else
    eAPM.Text:='APM not supported';
  APMPanel.Visible:=APM.SystemPower.ApmPresent;
  cbxUPS.Checked:=APM.SystemPower.UpsPresent;
  cbxTC.Checked:=APM.SystemPower.ThermalControl;
  cbxVD.Checked:=APM.SystemPower.VideoDimPresent;
  cbxPT.Checked:=APM.SystemPower.ProcessorThrottle;
  cbxDSD.Checked:=APM.SystemPower.DiskSpinDown;
  cbxPB.Checked:=APM.SystemPower.PowerButtonPresent;
  cbxSB.Checked:=APM.SystemPower.SleepButtonPresent;
  cbxLS.Checked:=APM.SystemPower.LidPresent;
  cbxSysBat.Checked:=APM.SystemPower.SystemBatteriesPresent;

  eLWT.Text:=FormatSeconds(APM.LastWakeTime);
  eLST.Text:=FormatSeconds(APM.LastSleepTime);}
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -