本文作者:icy

pascal-Pascal tSMBIOS 项目介绍:轻松读取系统管理 BIOS 信息

icy 今天 5 抢沙发
pascal-Pascal tSMBIOS 项目介绍:轻松读取系统管理 BIOS 信息摘要: Pascal tSMBIOS 项目介绍:轻松读取系统管理 BIOS 信息 项目概述 tSMBIOS 是一个用 Pascal(Delphi/Free Pascal)编写的开源库,专门...

pascal-Pascal tSMBIOS 项目介绍:轻松读取系统管理 BIOS 信息

Pascal tSMBIOS 项目介绍:轻松读取系统管理 BIOS 信息

项目概述

tSMBIOS 是一个用 Pascal(Delphi/Free Pascal)编写的开源库,专门用于读取和解析计算机的 SMBIOS(System Management BIOS)信息。该项目由 RRUZ 开发并维护,为 Pascal 开发者提供了一个强大而便捷的工具来访问系统硬件信息。

核心功能

1. SMBIOS 数据结构解析

tSMBIOS 能够完整解析 SMBIOS 规范中定义的各种数据结构,包括: - 系统信息(制造商、型号、序列号) - 主板信息 - BIOS 信息 - 处理器详细信息 - 内存设备信息 - 端口和连接器信息

2. 跨平台支持

  • Windows(32位和64位)
  • Linux
  • macOS

3. 多种访问方式

  • 通过操作系统 API 获取 SMBIOS 数据
  • 直接从物理内存读取原始 SMBIOS 数据
  • 支持 UEFI 和传统 BIOS 系统

安装与使用

安装方法

  1. 克隆项目到本地:
text
git clone https://github.com/RRUZ/tsmbios.git
  1. 在 Delphi 或 Lazarus 中添加路径:
  • tsmbios 目录添加到库路径
  • 在项目中添加 uSMBIOS 单元

基本使用示例

text
program SMBIOSDemo;

uses
  SysUtils, uSMBIOS;

var
  SMBios: TSMBios;
  BIOSInfo: TBIOSInformation;
begin
  // 创建 SMBIOS 对象
  SMBios := TSMBios.Create;
  try
    // 获取 BIOS 信息
    BIOSInfo := SMBios.BIOSInfo;
    
    WriteLn('BIOS 供应商: ' + BIOSInfo.VendorStr);
    WriteLn('BIOS 版本: ' + BIOSInfo.VersionStr);
    WriteLn('BIOS 发布日期: ' + BIOSInfo.ReleaseDateStr);
    WriteLn('BIOS 大小: ' + IntToStr(BIOSInfo.Size) + ' KB');
    
    // 获取系统信息
    WriteLn('系统制造商: ' + SMBios.SysInfo.ManufacturerStr);
    WriteLn('系统型号: ' + SMBios.SysInfo.ProductNameStr);
    WriteLn('系统序列号: ' + SMBios.SysInfo.SerialNumberStr);
    
  finally
    SMBios.Free;
  end;
end.

实际应用示例

示例 1:获取详细的处理器信息

text
procedure ShowProcessorInfo;
var
  SMBios: TSMBios;
  ProcessorInfo: TProcessorInformation;
  i: Integer;
begin
  SMBios := TSMBios.Create;
  try
    WriteLn('=== 处理器信息 ===');
    
    for i := 0 to SMBios.ProcessorInfo.Count - 1 do
    begin
      ProcessorInfo := SMBios.ProcessorInfo[i];
      
      WriteLn('处理器 ' + IntToStr(i + 1) + ':');
      WriteLn('  制造商: ' + ProcessorInfo.ManufacturerStr);
      WriteLn('  型号: ' + ProcessorInfo.ProcessorVersionStr);
      WriteLn('  核心数: ' + IntToStr(ProcessorInfo.CoreCount));
      WriteLn('  线程数: ' + IntToStr(ProcessorInfo.ThreadCount));
      WriteLn('  最大频率: ' + IntToStr(ProcessorInfo.MaxSpeed) + ' MHz');
      WriteLn('  当前频率: ' + IntToStr(ProcessorInfo.CurrentSpeed) + ' MHz');
      WriteLn('  插槽: ' + ProcessorInfo.SocketDesignationStr);
      WriteLn('');
    end;
    
  finally
    SMBios.Free;
  end;
end;

示例 2:获取内存设备信息

text
procedure ShowMemoryInfo;
var
  SMBios: TSMBios;
  MemoryInfo: TMemoryDeviceInformation;
  i: Integer;
  TotalMemory: Cardinal;
begin
  SMBios := TSMBios.Create;
  try
    WriteLn('=== 内存信息 ===');
    TotalMemory := 0;
    
    for i := 0 to SMBios.MemoryDeviceInfo.Count - 1 do
    begin
      MemoryInfo := SMBios.MemoryDeviceInfo[i];
      
      if MemoryInfo.Size > 0 then
      begin
        WriteLn('内存插槽 ' + MemoryInfo.DeviceLocatorStr + ':');
        WriteLn('  大小: ' + IntToStr(MemoryInfo.Size) + ' MB');
        WriteLn('  类型: ' + MemoryInfo.MemoryTypeStr);
        WriteLn('  频率: ' + IntToStr(MemoryInfo.Speed) + ' MHz');
        WriteLn('  制造商: ' + MemoryInfo.ManufacturerStr);
        WriteLn('  序列号: ' + MemoryInfo.SerialNumberStr);
        WriteLn('');
        
        TotalMemory := TotalMemory + MemoryInfo.Size;
      end;
    end;
    
    WriteLn('总内存: ' + IntToStr(TotalMemory) + ' MB');
    
  finally
    SMBios.Free;
  end;
end;

示例 3:系统信息监控工具

text
unit SystemMonitor;

interface

uses
  Classes, SysUtils, uSMBIOS;

type
  TSystemMonitor = class
  private
    FSMBios: TSMBios;
    function GetSystemInfo: string;
    function GetHardwareInfo: string;
  public
    constructor Create;
    destructor Destroy; override;
    function GenerateReport: string;
  end;

implementation

constructor TSystemMonitor.Create;
begin
  inherited Create;
  FSMBios := TSMBios.Create;
end;

destructor TSystemMonitor.Destroy;
begin
  FSMBios.Free;
  inherited Destroy;
end;

function TSystemMonitor.GetSystemInfo: string;
begin
  Result := '系统信息:' + sLineBreak +
            '==========' + sLineBreak +
            '制造商: ' + FSMBios.SysInfo.ManufacturerStr + sLineBreak +
            '型号: ' + FSMBios.SysInfo.ProductNameStr + sLineBreak +
            '序列号: ' + FSMBios.SysInfo.SerialNumberStr + sLineBreak +
            'UUID: ' + FSMBios.SysInfo.UUIDStr + sLineBreak;
end;

function TSystemMonitor.GetHardwareInfo: string;
var
  i: Integer;
begin
  Result := '硬件信息:' + sLineBreak +
            '==========' + sLineBreak;
            
  // BIOS 信息
  Result := Result + 'BIOS:' + sLineBreak +
            '  版本: ' + FSMBios.BIOSInfo.VersionStr + sLineBreak +
            '  发布日期: ' + FSMBios.BIOSInfo.ReleaseDateStr + sLineBreak;
            
  // 主板信息
  Result := Result + '主板:' + sLineBreak +
            '  制造商: ' + FSMBios.BaseBoardInfo.ManufacturerStr + sLineBreak +
            '  型号: ' + FSMBios.BaseBoardInfo.ProductStr + sLineBreak;
            
  // 处理器信息
  Result := Result + '处理器:' + sLineBreak;
  for i := 0 to FSMBios.ProcessorInfo.Count - 1 do
  begin
    Result := Result + '  CPU' + IntToStr(i+1) + ': ' + 
              FSMBios.ProcessorInfo[i].ProcessorVersionStr + sLineBreak;
  end;
end;

function TSystemMonitor.GenerateReport: string;
begin
  Result := GetSystemInfo + sLineBreak + GetHardwareInfo;
end;

end.

高级特性

1. 原始数据访问

text
// 访问原始 SMBIOS 表
var
  RawData: TSmBiosTable;
begin
  RawData := SMBios.RawSMBIOSData;
  // 直接处理原始数据
end;

2. 自定义解析

text
// 扩展自定义结构解析
type
  TCustomSMBIOS = class(TSMBios)
  public
    function GetCustomStructure: TCustomInfo;
  end;

3. 错误处理

text
try
  SMBios := TSMBios.Create;
  // 操作 SMBIOS 数据
except
  on E: Exception do
    WriteLn('读取 SMBIOS 时出错: ' + E.Message);
end;

应用场景

  1. 系统信息工具开发:创建类似于 CPU-Z 的系统信息查看工具
  2. 资产管理软件:自动收集硬件配置信息用于 IT 资产管理
  3. 诊断工具:硬件故障诊断和系统兼容性检查
  4. 授权管理:基于硬件信息的软件授权系统
  5. 远程管理:在远程管理工具中收集客户端硬件信息

优势特点

  • 易于使用:简单的 API 设计,快速上手
  • 功能完整:支持 SMBIOS 规范的大部分数据结构
  • 性能优秀:直接内存访问,响应迅速
  • 文档完善:项目包含详细的使用示例和文档
  • 活跃维护:定期更新,支持最新的 SMBIOS 规范

总结

tSMBIOS 项目为 Pascal 开发者提供了一个强大、可靠的 SMBIOS 访问解决方案。无论是开发系统工具、管理软件还是诊断程序,这个库都能大大简化硬件信息获取的复杂度。其跨平台特性和完整的 SMBIOS 支持使其成为 Pascal 生态系统中不可或缺的工具之一。

通过简单的几行代码,开发者就能获取到详细的系统硬件信息,无需深入了解复杂的 SMBIOS 规范底层细节。项目的开源特性也意味着开发者可以根据自己的需求进行定制和扩展。

如果你正在使用 Pascal 开发需要访问硬件信息的应用程序,tSMBIOS 绝对值得尝试。

tsmbios.zip
类型:压缩文件|已下载:0|下载方式:免费下载
立即下载
文章版权及转载声明

作者:icy本文地址:https://zelig.cn/2026/03/427.html发布于 今天
文章转载或复制请以超链接形式并注明出处软角落-SoftNook

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏

阅读
分享

发表评论

快捷回复:

验证码

评论列表 (暂无评论,5人围观)参与讨论

还没有评论,来说两句吧...